DevBook/JVM 밑바닥까지 파헤치기
-
[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도 여전히 세대 단위 컬렉션 이론에 기초하고 있지만, 힙 메모리 레이아웃은 다른 컬렉터와 다름크기와 수가 고정된 세대 단위 영역 구분이 아닌, 연속된 자..
-
[JVM] 가비지 컬렉터와 메모리 할당 전략 (2) - 클래식 가비지 컬렉터DevBook/JVM 밑바닥까지 파헤치기 2025. 3. 18. 00:23
클래식 가비지 컬렉터 *신세대용1. 시리얼 컬렉터가장 기초적이고 오래된 컬렉터, JDK 1.3.1 전까지 핫스팟 가상 머신의 구세대용 컬렉터로는 유일한 선택지였음'단일 스레드'로 동작하나의 GC 스레드가 모두 처리한다.GC가 시작되면 '회수가 완료될 때까지 다른 모든 작업 스레드가 멈춰 있어야 한다'특징시리얼 컬렉터는 최신 JDK에서도 꾸준히 지원하고 있음다른 컬렉터의 단일 스레드 알고리즘보다 간단하고 효율적이라는 이점이 있음가용 메모리가 적은 환경에서는 알고리즘 자체가 요구하는 메모리 사용량이 가장 적음 단일 코어 프로세서 또는 코어 수가 적은 환경이라면 시리얼 컬렉터는 스레드 상호 작용에 의한 오버헤드가 없음-XX:+UseSerialGC 매개변수 추가하여 사용 가능 2. 파뉴 컬렉터여러 스레드를 활용..
-
[JVM] 가비지 컬렉터와 메모리 할당 전략 (1) - 기본 알고리즘DevBook/JVM 밑바닥까지 파헤치기 2025. 3. 17. 00:20
들어가기 전,가비지 컬렉션이 처리해야 하는 문제 3가지어떤 메모리를 회수해야 할까?언제 회수해야 할까?어떻게 회수해야 할까?'메모리 할당과 회수'라고 할 때의 메모리는 런타임 데이터 영역 중 힙 영역과 메서드 영역들만 지칭함프로그램이 어떤 객체를 생성할지, 얼마나 많이 만들지는 오직 런타임에만 알 수 있음해당 메모리 영역들의 할당과 회수는 동적으로 이루어짐가비지 컬렉터는 이런 영역을 관리하는 데 집중함나머지 영역(스택 영역, 프로그램 카운터 레지스터)들은 메서드가 끝나거나 스레드가 종료되면 자연스럽게 회수됨 객체 생존 판단 알고리즘가비지 컬렉터가 힙을 청소하려면 가장 먼저 어떤 객체가 살아 있고, 어떤 객체가 죽었는지 판단해야 함 1. 참조 카운팅 알고리즘자바에서는 해당 알고리즘을 사용하지 않음 특징객체..