DevBook/JVM 밑바닥까지 파헤치기
-
[JVM] 가상 머신 실행 서브시스템 (2) - 클래스 로딩 메커니즘DevBook/JVM 밑바닥까지 파헤치기 2025. 4. 1. 00:35
들어가기 전,클래스 파일에 서술된 정보를 가상 머신이 사용하려면 먼저 로드해야 함가상 머신이 클래스 파일을 로드하는 방법, 그 정보를 가상 머신 안에서 활용하는 방법에 대해 설명함JVM은 클래스를 설명하는 데이터를 클래스 파일로부터 메모리로 읽어 들이고 그 데이터를 검증, 변환, 초기화하고 나서 최종적으로 가상 머신이 곧바로 사용할 수 있는 자바 타입을 생성함이 과정을 가상 머신의 클래스 로딩 메커니즘이라고 함자바에서는 클래스 로딩, 링킹, 초기화가 모두 '프로그램 실행 중에' 이루어짐자바가 동적 확장 언어 기능을 제공할 수 있는 것은 런타임에 이루어지는 동적 로딩과 동적 링킹 덕분임이와 같이 어플리케이션을 동적으로 조합하는 기법은 가장 기초적인 예인 JSP부터 비교적 복잡한 OSGi 기술에 이르기까지 ..
-
[JVM] 가상 머신 실행 서브시스템 (1) - 클래스 파일 구조DevBook/JVM 밑바닥까지 파헤치기 2025. 3. 29. 23:28
JVM이 제공하는 언어 독립성JVM은 플랫폼 독립성을 넘어 언어 독립성을 제공함JVM이 다양한 플랫폼을 지원하고, 모든 VM이 동일한 프로그램 저장 형식(바이트코드)을 지원한다는 사실은 플랫폼 독립성의 핵심임JVM은 자바를 포함해 어떠한 프로그래밍 언어에도 종속되지 않음'클래스 파일'이라는 특정한 바이너리 파일 형식에만 의존할 뿐임는 클래스 파일이 여러 가지 필수 구문을 갖추고 특정 구조를 따르도록 제약하고 있음다른 언어에서도 JVM은 하드웨어 독립적인 범용 실행 플랫폼으로 활용할 수 있고, 클래스 파일은 프로그램을 전달하는 매체로 이용할 수 있음자바 언어의 다양한 구문, 키워드, 상수, 변수, 연산 기호는 결국 바이트코드 명령어 조합으로 표현됨 클래스 파일의 구조클래스 파일은 바이트(byte)를 하나의..
-
[JVM] 가비지 컬렉터와 메모리 할당 전략 - 메모리 할당과 회수 전략DevBook/JVM 밑바닥까지 파헤치기 2025. 3. 27. 22:27
JVM이 제공하는 자동 메모리 관리의 근본적인 목표는 객체의 메모리를 '자동으로 할당'하고 객체에 할당된 메모리를 '자동으로 회수'하는 것객체 메모리 할당이란 개념적으로는 힙에 할당한다는 뜻참고)객체 할당 규칙은 고정된 게 아님현재 사용하는 가비지 컬렉터와 메모리 관련 가상 머신 매개 변수 설정값에 따라 달라질 수 있음 여기서는 시리얼 컬렉터를 사용한 가장 기본적인 메모리 할당 정책을 알아본다.(모든 상황에서 최고인 단 하나의 컬렉터나 매개 변수 조합이란 없다) 1. 객체는 먼저 에덴에 할당된다.대부분의 경우 객체는 신세대의 Eden 영역에 할당됨Eden 영역의 공간이 부족해지면 가상 머신은 Minor GC를 시작함Eden과 현재 사용중인 Survivor 영역(from)에 있는 객체 중 살아남은 객체들을..
-
[JVM] 가비지 컬렉터와 메모리 할당 전략 (2) - 클래식 가비지 컬렉터 > G1 GCDevBook/JVM 밑바닥까지 파헤치기 2025. 3. 18. 00:25
G1 컬렉터(가비지 우선 컬렉터)JDK 9부터 default gc 힙 메모리 레이아웃부분 회수(partial collection)와 리전(region)을 회수 단위로 하는 메모리 레이아웃 적용힙 메모리의 어느 곳이든 회수 대상에 포함할 수 있음이를 회수 집합(collection set)이라 하며 CSet이라 함어느 세대에 속하느냐가 아니라 '어느 영역에 쓰레기가 가장 많으냐'와 '회수했을 때 이득이 어디가 가장 크냐'가 회수 영역을 고르는 기준이 됨 (G1의 Mixed GC 모드)영역 기반 힙 메모리 레이아웃이 정지 시간 예측 모델 구현을 가능하게 함G1도 여전히 세대 단위 컬렉션 이론에 기초하고 있지만, 힙 메모리 레이아웃은 다른 컬렉터와 다름크기와 수가 고정된 세대 단위 영역 구분이 아닌, 연속된 자..