Class 파일 기본 구조
、
Java Class
파일 이 뭐 예요?
《
JVM Spec
》
(Second Edtion)
설명 이 있 습 니 다:
Java Class
파일
8
비트 바이트 흐름 구성,모든
16
위치
32
평화
64
자리 수 는 각각 읽 기 를 통과 한다.
2
개,
4
개 와
8
바이트 로 구성 되 어 있 으 며,다 바이트 데 이 터 는 항상...
Big-endian
순서대로 저장 합 니 다.즉,높 은 바이트 가 낮은 주소 에 놓 여 있 습 니 다.매 개
Class
파일 이 모두 포함 되 어 있 고 하나만 포함 되 어 있 습 니 다.
Java
유형
(
클래스 또는 인터페이스
)
。
혹시
JVM Spec
>의 표현 이 명확 하지 않 으 니,우 리 는 을 참고 할 수 있다."tl="kr send">
Inside JVM
》
(Second Edtion)
설명:
Java Class
특별히
.Class
접미사
Java
가상 컴퓨터 에서 불 러 올 수 있 는 파일.이 표현 은 비교적 명확 해 야 한다.만약 아직도 명확 하지 않다 고 생각한다 면,나 는 네가 이 문장 을 다 읽 은 후에 다시 돌아 와 서 이해 해 보 는 것 을 건의 할 수 밖 에 없다.
J
둘째,
Java Class 파일 형식
《JVM Spec
》(Second Edtion)
자바 클래스
파일 형식 은 C 와 유사 합 니 다.
구조의 기호 가 작 성 된 위조 구 조 를 나타 낸다.Java 클래스 설명
파일 형식 구조의 내용 을 항목 이 라 고 합 니 다(items)
。항목 의 크기 는 가 변 적 이 며,항목 마다 순서대로 Class 에 저 장 됩 니 다.
파일 에 인접 한 항목 사이 에 어떠한 간격 도 없 으 면 Class 를 사용 할 수 있 습 니 다.
서류 가 치밀 하 다.그렇다면 이 항목 은 구체 적 으로 무엇 을 가리 키 는 것 일 까?
에서 제시 한 ClassFile
구조의 그림:
이 그림 은 순서대로 열거 되 었 다.
ClassFile
모든 항목 은 그 유형 과 이름 을 포함한다.항목 의 유형 은 u1,u2,u4 또는 표 이름 일 수 있 습 니 다.그 중에서 u1,u2 와 u4 는 자바 Class 파일 의 기본 데이터 형식 으로 각각 기호 가 없 는 유형,1,2,4 바이트 의 데 이 터 를 나타 낸다.예 를 들 어"u4 magic;"ClassFile 항목 을 표시 합 니 다.이 항목 의 이름 은 magic,즉 마수 입 니 다.이 항목 은 모두 4 개의 바이트 를 차지 합 니 다.기호 유형 이 없 는 4 개의 바이트 의 바 이 너 리 수의 구체 적 인 값 은 바로 이 magic 항목 의 구체 적 인 내용 입 니 다.항목 형식 이 표 이름 일 때 표 이름 에 따라 관련 표를 찾 아 볼 수 있 습 니 다.이 표 들 의 항목 도 자바 Class 파일 의 기본 데이터 형식 과 항목 의 이름 으로 구성 되 어 있 습 니 다.ClassFile 구조 중의 각 항목 은 다음 과 같이 간략하게 분석 할 수 있다.
ClassFile 표 구조
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_Class;
u2 super_Class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
(1) magic(
마수
각 클래스
파일 의 앞 4
바이트
): 0xCAFEBABE
。마수 의 역할 은 자바 클 라 스 를 쉽게 구분 할 수 있다 는 것 이다.
파일 과 자바 클래스
서류파일 이 0xCAFEBABE 가 아니라면
처음에는 자바 클래스 가 아 닐 것 이다.
서류자바
오 크
'할 때 이 마 수 는 이미 정 해 졌 고 자바 를 예시 했다.
그 이름 의 등장 은마수 의 내력 은 여러분 스스로 찾 아 보 세 요.
J
(2) minor_version
majorversion
Class
파일 아래
바이트 에는 주,차 버 전 번호 가 포함 되 어 있 습 니 다.보통 주 버 전 번호 와 일련의 버 전 번호 만 주어진 후 자바
가상 컴퓨터 에서 만 Class 를 읽 을 수 있 습 니 다.
서류하면,만약,만약...
파일 의 버 전 번호 가 자바 를 초과 하 였 습 니 다.
가상 컴퓨터 가 처리 할 수 있 는 유효한 범위,자바
가상 컴퓨터 는 이 Class 를 처리 하지 않 을 것 입 니 다.
서류
(3) constant_pool_count
버 전 번호 뒤에 있 는 항목 은 constantpool_count
즉,상수 탱크 계수 항목 입 니 다.이 항목 의 값 은 0 이상 이 어야 합 니 다.Class 를 드 립 니 다.
파일 중 constantpool
항목 의 개 수 는 색인 을 0 으로 포함 합 니 다.
의 constantpool
항목,그러나 이 항목 은 Class 에 나타 나 지 않 습 니 다.
파일 의 constantpool
리스트 constantpool [ ]
맞다
(4) constant_pool [ ]
constant_pool_count
항목 아래 는 constantpool [ ]
항목상수 탱크 는 constantpool_count-1
연속 적 이 고 가 변 적 인 길이 의 cpinfo
표 구성,문자 문자열,final 같은 것 이 저장 되 어 있 습 니 다.
변수 값,클래스 이름과 방법 이름 의 상수.
cp_info
cp_info {
u1 tag;
u1 info[];
}
constant_pool
constant_pool [0 ]
Class
, Java
。 1
constant_pool_count-1
constant_pool
, cp_info
。cp_info
tag
byte
, cp_info
, cp_info
tag
;
cp_info
tag
CONSTANT_Class 7
CONSTANT_Fieldref 9
CONSTANT_Methodref 10
CONSTANT_InterfaceMethodref 11
CONSTANT_String 8
CONSTANT_Integer 3
CONSTANT_Float 4
CONSTANT_Long 5
CONSTANT_Double 6
CONSTANT_NameAndType 12
CONSTANT_Utf8 1
,cp_info
, Class
, 、 CONSTANT_Xxxx_info
constant_pool
, cp_info
tag
( ) 。 , constant_pool_count
7
, cp_info
tag
7
, constant_pool
CONSTANT_Class_info
, onstant_pool[ ]
( constant_pool
) CONSTANT_Class_info
, ( ) 。CONSTANT_Class_info
《JVM Spec
》(2nded)
《Inside JVM
》(2nded)
; 1
, CONSTANT_Utf8_info
, 。
cp_info
, cp_info
tag(
)
1
, CONSTANT_Utf8_info
, cp_info
tag(
)
3
, CONSTANT_Integer_info
, 。 《JVM Spec
》(2nded)
《Inside JVM
》(2nded)
。
(5) access_flegs
access_flags
,
Java
。
access_flags
:
access_flags
ACC_PUBLIC 0x0001
public
,
ACC_FINAL 0x0010
final
,
ACC_SUPER 0x0020
invokespecial
ACC_INTERFACE 0x0200
,
ACC_ABSTRACT 0x0400
abstract
,
access_flags
。 , ; , ; 。
(6) this_class
this_class
,
。 this_class
CONSTANT_Class_info
。
(7) super_class
Class
this_class
super_class
,super_class
0
, 。 super_class
0
, Class
java.lang.Object
。 super_class
0
, , Class
, super_class
CONSTANT_Class_info
, final
; Class
, super_class
java.lang.Object
CONSTANT_Class_info
。
(8) interfaces_count
interfaces [ ]
super_class
interfaces_count
, 。
interfaces_count
interfaces
, , interfaces_count
。interfaces
。
(9) fields_count
fields [ ]
Class
, interfaces [ ]
。fields_count
fields
field_info
, Java
。
field_info
, 、 、 。 field_info
, ; field_info
, 。
, Java
fields
,fields
。
(10) methods_count
methods [ ]
Class
, fields
。 methods_count
, , 。methods_count
methods
, methods_count
method_info
。
method_info
, ( )。 abstract
native
, method_info
、 、 。
, Java
fields
,fields
。
(11) attributes_count
attributes [ ]
Class
(attribute
),
。 attributes _count
, , attributes
attributes _info
。attributes _count
attributes
, attributes _count
attributes _info
。 attributes _info
CONSTANT_Utf8_info
, 。 《JVM Spec
》(Second Edtion)
ClassFile
SourceFile
。
, , Class
, ClassFile
attributes
, field_info
attributes
, method_info
attributes
, , 。
,Class
, Class
, , , 。 blog---- Java Class
。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.