티스토리 뷰

공부자료

[자바고급] JVM 기본 1

임다솜 임다솜 2017.02.25 20:44


http://cleancodes.tistory.com/6

http://cs-fundamentals.com/java-programming/how-to-compile-run-java-program-in-linux.php



2. JVM 구성

2.1 클래스 로더 서브 시스템

클래스나 인터페이스를 JVM으로 로딩하는 기능 수행


2.2 실행엔진

클래스 로더가 로딩한 클래스의 메서드들에 포함되어 있는 인스트럭션 정보를 실행

※인스트럭션 정보?


2.3 런타임 데이터 영역

JVM을 실행하기 위해 OS로부터 할당받은 메모리 공간


2.3.1 메서드 영역 --> JVM이 시작될 때 생성되는 영역

메서드 영역은 모든 JVM 스레드에서 공유하는 영역이다. 다음과 같은 데이터를 저장한다.

런타임 상수 풀, 필드 정보(데이터, 메서드와 생성자)

--> 클래스와 관련된 정보를 저장하는 영역


2.3.2 JVM 스택 --> 스레드가 시작될 때 생성되는 영역

스레드가 시작된 후 생성되는 영역으로 Stack Frame 구조체를 저장하는 스택이다. 연산과정의 임시 변수나 임시 결과와 같은 데이터를 저장하는 구조체이다.

다음과 같이 3개로 나뉜다.

2.3.2.1 Local Variable Section

2.3.2.2 Operand Stack

2.3.2.3 Frame Data



2.3.3 Native Method 스택

자바코드가 아닌 다른 언어로 된(C코드) 코드가 실행될 때의 스택 정보를 저장한다.


2.3.4 PC 레지스터

자바의 스레드는 각자의 Program Counter 레지스터를 가진다. 네이티브한 코드를 제외한 모든 자바 코드들이 수행될 때 JVM의 Instruction 주소를 PC 레지스터에 저장한다.

CPU가 명령어를 처리하는 과정에서 필요한 정보를 CPU내의 Register라는 기억장치에 저장한다.


2.3.5 Heap 영역

클래스 인스턴스, 배열이 저장된다. 여러 스레드에서 공유할 수 있는 메모리 공간이다. 


지금까지의 내용을 정리한 이미지



자바 코드가 실행되는 과정

1. Java Source(.java) 파일을 Java Compiler(javac)로 컴파일하여 Java Byte Code(.class) 파일을 생성한다.

2. 클래스 로더가 Java Byte Code를 런타임 데이터 영역에 로드한다.

3. 실행엔진이 Java Byte Code를 실행한다.




JVM 자세한 설명 참고 사이트

Naver D2 - JVM Internal

Naver D2 - Java Garbage Collection

Oracle Specification - Java Virtual Machine Specification


ClassFile의 구조

아래 클래스파일의 구조와 같이 자바의 클래스 파일에는 constant_pool[] 과 fields[] 라는 정보가 있다.

오라클의 Java Virtual Machine Specification - 4.1 The ClassFile Format 의 내용이다.

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]; }


constant_pool[]

The constant_pool is a table of structures (§4.4) representing various string constants, class and interface names, field names, and other constants that are referred to within the ClassFile structure and its substructures. The format of each constant_pool table entry is indicated by its first "tag" byte.

The constant_pool table is indexed from 1 to constant_pool_count - 1.

-Java Virtual Machine Specification - 4.1 The ClassFile Format

constant_pool은 구조체이다.  (변하지 않는 값들을 참조하는 구조체인 것 같다)

어떤 구조체? 스트링 상수, 클래스와 인터페이스 이름, 변수 이름, 그 밖에 클래스파일 구조체와 클래스파일을 구성하는 부수적인 구조체에 명시된 상수들을 표현하는 구조체


fields[]

Each value in the fields table must be a field_info structure (§4.5) giving a complete description of a field in this class or interface. The fields table includes only those fields that are declared by this class or interface. It does not include items representing fields that are inherited from superclasses or superinterfaces.

-Java Virtual Machine Specification - 4.1 The ClassFile Format

클래스/인터페이스에서 선언한 필드들에 대한 정보를 저장하는 구조체이다. 

상속받은 클래스/인터페이스라도 부모 클래스에 선언한 필드값은 저장하지 않고, 해당 클래스에 선언한 필드 정보만 저장한다.


methods[]

Each value in the methods table must be a method_info structure (§4.6) giving a complete description of a method in this class or interface. If neither of the ACC_NATIVE and ACC_ABSTRACT flags are set in the access_flags item of a method_info structure, the Java Virtual Machine instructions implementing the method are also supplied.

The method_info structures represent all methods declared by this class or interface type, including instance methods, class methods, instance initialization methods (§2.9), and any class or interface initialization method (§2.9). The methods table does not include items representing methods that are inherited from superclasses or superinterfaces.

-Java Virtual Machine Specification - 4.1 The ClassFile Format

methods도 구조체이다.

클래스/인터페이스에 선언된 모든 메서드의 정보를 가지고 있다. 인스턴스 메서드, 클래스 메서드, 생성자 메서드, 접근제어자, 메서드명, 파라미터 타입, 반환타입, 메서드 자체의 실행코드 등 메서드와 관련된 정보를 가지고 있다.

조금 더 깊이 보면, method_info 구조체는 attribute_info 구조체를 attributes[] 필드로 포함하고 있는데 이 attribute_info 구조체는 23개의 예약된 속성을 가지고 있는데 그 중에 클래스의 실제 코드, 예외상황 등에 대한 정보도 가지고 있다. 그래서 methods 구조체에서 코드 데이터도 포함하고 있다고 말하는 것이다.




ㅇㅇ

댓글
댓글쓰기 폼
공지사항
Total
41,170
Today
70
Yesterday
59
링크
TAG
more
«   2018/07   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
글 보관함