Study/JVM 밑바닥까지 파헤치기
-
[JVM] 가비지 컬렉터와 메모리 할당 전략 (1) - 기본 알고리즘Study/JVM 밑바닥까지 파헤치기 2025. 3. 17. 00:20
들어가기 전,가비지 컬렉션이 처리해야 하는 문제 3가지어떤 메모리를 회수해야 할까?언제 회수해야 할까?어떻게 회수해야 할까?'메모리 할당과 회수'라고 할 때의 메모리는 런타임 데이터 영역 중 힙 영역과 메서드 영역들만 지칭함프로그램이 어떤 객체를 생성할지, 얼마나 많이 만들지는 오직 런타임에만 알 수 있음해당 메모리 영역들의 할당과 회수는 동적으로 이루어짐가비지 컬렉터는 이런 영역을 관리하는 데 집중함나머지 영역(스택 영역, 프로그램 카운터 레지스터)들은 메서드가 끝나거나 스레드가 종료되면 자연스럽게 회수됨 객체 생존 판단 알고리즘가비지 컬렉터가 힙을 청소하려면 가장 먼저 어떤 객체가 살아 있고, 어떤 객체가 죽었는지 판단해야 함 1. 참조 카운팅 알고리즘자바에서는 해당 알고리즘을 사용하지 않음 특징객체..
-
[JVM] 자동 메모리 관리 - 자바 메모리 영역과 메모리 오버플로우Study/JVM 밑바닥까지 파헤치기 2025. 3. 15. 20:10
1. 런타임 데이터 영역 -> 자바 프로그램 실행 동안 필요한 메모리 영역JVM은 자바 프로그램을 실행하는 동안 필요한 메모리를 몇 개의 데이터 영역으로 나눠 관리함이 영역들은 각각 목적과 생성/삭제 시점이 있음 1.1 프로그램 카운터바이트코드 인터프리터는 카운터의 값을 바꿔 다음에 실행할 바이트코드 명령어를 선택하는 식으로 동작프로그램의 제어 흐름, 분기, 순환, 점프 등을 표현하는 것JVM에서의 멀티스레딩은 CPU 코어를 여러 스레드가 교대로 사용하는 방식으로 구현되므로, 각 코어는 한 스레드의 명령어만 실행하게 됨스레드 전환 후 이전에 실행하다 멈춘 지점을 정확하게 복원하려면 스레드 각각에는 고유한 프로그램 카운터가 필요함각 스레드의 카운터는 서로 영향을 주지 않는 독립된 영역에 저장됨이 메모리 영..