2024/12/21 4

[JVM 밑바닥까지 파헤치기] 3-5. 가비지 컬렉터와 메모리 할당 전략: 저지연 가비지 컬렉터

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 성능 지표컬렉터는 최대 두개의 성능지표 달성이 가능함 지연 시간처리량메모리 사용량 2. 셰넌도어현재는 OpenJDK에서만 제공됨힙 크기와 상관없이 일시 정지를 10밀리초 이내에 묶어두는 것이 목표 동시 모으기사용자 스레드는 GC 스레드와 동시에 수행됨 연결 행렬리전 간 참조 관계 기록

Java 2024.12.21

[JVM 밑바닥까지 파헤치기] 3-4. 가비지 컬렉터와 메모리 할당 전략: 클래식 가비지 컬렉터

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 JDK 7 ~ JDK 11 내의 GC 기술고성능 / 저지연 컬렉터들과 구분됨 1. 구세대시리얼 올드 컬렉터가장 기초적이고 오래된 컬렉터Mark-Compact 알고리즘단일 스레드메모리 사용량이 적음멀티코어 시스템에서 성능이 저하됨 매개변수-XX: +UseSerialGC: 시리얼 올드 컬렉터와 신세대 시리얼 컬렉터가 모두 활성화됨 CMS 컬렉터동시성을 지원하는 최초의 컬렉터GC 스레드와 사용자 스레드가 동시에 실행됨일시 정지 시간을 최소로 줄이는데 집중구세대가 68% 이상 차면 동작함 Mark-Sweep 알고리즘최초 표시 (Stop-The-World): GC 루트에서 직접 참조되는 객체 표시동시 표시: GC 루트에서 도달 가능한 모든 객..

Java 2024.12.21

[JVM 밑바닥까지 파헤치기] 3-3. 가비지 컬렉터와 메모리 할당 전략: 구현

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 루트 노드 열거GC 루트 노드로부터 참조 체인을 찾는 작업스택 프레임을 비롯하여 정적 변수, 레지스터 등을 포함하여 추적루트 노드를 열거하려면 stop the world를 피할 수 없음 OopMapObject Offset Map각 스레드의 스택에 있는 객체 참조의 위치를 기록하는 맵안전 지점이라는 특정한 위치에만 기록OopMap을 모든 명령어에 생성하지 않음 객체 이동 지원GC에 의해 참조가 변경될 경우, 스레드 스택에 있는 참조가 올바르게 갱신되도록 합니다. 2. 안전안전 지점일시 정지 상태를 트리거하는 지점jvm이 스레드의 상태를 안전하게 분석하고, 참조 관계를 변경하지 않을 것임을 보장 자발적 멈춤플래그 비트 사용각 스레드..

Java 2024.12.21

[JVM 밑바닥까지 파헤치기] 3-2. 가비지 컬렉터와 메모리 할당 전략: 가비지 컬렉션

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 세대 단위 컬렉션 이론대부분의 GC들의 근간 이론객체들을 나이에 따라 각기 다른 영역에 할당죽을 운명인 객체들을 한데 모음살아남을 객체를 나이가 있는 곳의 영역에 유지 가설약한 세대 가설대다수 객체는 일찍 죽음메모리 접근 최적화Young Generation을 대상으로 GC를 자주 실행시킴 강한 세대 가설살아남은 횟수가 늘어날수록, 더 오래 살 가능성이 높음메모리 접근 최적화장기 생존하는 객체는 Old Generation로 이동Old Generation를 대상으로 GC를 자주 실행하지 않음 세대 간 참조 가설세대 간 참조의 개수는 같은 세대 안에서의 참조보다 훨씬 적음상호 참조 관계두 객체는 삶과 죽음을 함께하는 경향이 있음결국 ..

Java 2024.12.21