오랜만에 JVM 메모리 구조를 보면서, Method Area는 정확히 어떤 역할을 맡는지가 궁금해 찾아본 내용들.
Class Area, Method Area, Static Area 등등 여러가지 이름으로 불린며, ClassLoader가 적재한 정보가 저장된다. 이 영역에 등록된 class만이 Heap 영역에 저장된다.
Java 8 버전 이후 부터는 Metaspace(Perm)영역으로 OS 에서 관리되는 영역으로 옮겨 졌다.

Runtime Data Area와 마찬가지로 JVM이 실행될 때 적재되며, 모든 쓰레드에서 접근이 가능하다.
Method Aread에서 저장하는 데이터는 아래를 참조
| Type Infomation | - Type의 전체이름
Type의 직계 하위 클래스 전체 이름
Type 클래스 / 인터페이스 여부
Type의 modifier (public / abstract / final)
연관된 인터페이스 이름 리스트 | | --- | --- | | Runtime constant Pool | Type의 모든 상수 정보를 가지고 있다.
Type, Field, Method의 모든 Symbolic Reference 정보
Constant Pool의 Entry는 인덱스 번호를 통해 접근
Object의 접근 등 모든 참조를 위한 핵심 요소 | | Field Infomaion | - Field Type
Field modifier (public / private / protected / static / final/ volatile/ transient) | | Method Infomation | Constructor를 포함한 모든 메소드
Method Name
Method Return Type
Method Parameter 수와 Type
Method modifier (public / private / protected / static / final/ syncronized / native / abstract)
Method 구현 부분이 있을 경우 ( abstract 또는 native가 아닐 경우 )
Method의 byteCode
Method의 Stack Frame의 Operand Stack 및 Local variable section의 크기
Exception Table | | Class Variable | Class 변수는 static 키워드로 선언된 변수를 의미
모든 인스턴스에 공유되며 인스턴스가 없어도 직접 접근이 가능하다.
변수는 인스턴스의 것이 아니라 클래스에 속하게 된다.
클래스를 사용하기 이전에 이 변수들은 미리 메모리를 할당받은 상태가 된다.
final class 변수는 상수로 치환되어 Runtime Constant Pool에 값을 복사한다.
static 변수는 해당 영역에 저장되지만, 기본형이 아닌 static 클래스형 변수는 래퍼런스 변수만 저장되고 실제 인스턴스는 Heap에 저장되어 있다. |
Live Study_Week 01. JVM 은 무엇이며, 자바 코드는 어떻게 실행하는 것인가.