자바 메모리 구조 정리

한꼬북·2021년 4월 16일
0

Java

목록 보기
2/7
post-thumbnail

자바 메모리 구조

1. Runtime Data Area

JVM 실행 시 OS에서 할당받은 메모리 영역을 3영역으로 나눔(Method, Heap, JVM Stack)

2. Method Area(메소드 영역)

JVM 시작할 때 생성
모든 스레드가 공유하며 로딩된 class의 바이트 코드를 저장함
Static 변수, 전역변수, 메소드가 할당되며 프로그램 JVM종료시까지 남아있음

3. Heap Area(힙 영역)

JVM 시작할 때 생성
Object Type 데이터들이 할당 됨
new Object 처럼 new를 사용해서 만들어 지는 객체, 배열들 전부 힙 영역 할당
힙 영역에 할당된 데이터들은 사용자가 직접 전부 관리해야만 하며
Stack 영역에서 참조하지 않는 Heap 영역에 있는 데이터들은 GC(Garbage Collection)에 대상이 됨

4. JVM Stack Area(JVM 스택 영역)

스레드 별로 생성되며 메소드를 호출할 때 마다 Stack Area 생성 됨
호출한 메소드가 종료되면 생성된 Stack Area가 제거됨

5. Stack Area(스택 영역)

Primitive Type의 데이터(지역변수와 매개변수)들이 할당 됨
함수가 호출됐을 때 데이터가 할당되며 함수의 호출이 끝나면 할당된 메모리는 자동적으로 지워짐
Heap 영역에 할당된 객체들에 대한 주소값을 가지고 있음
자동적으로 데이터들이 할당되고 지워지기 때문에 낭비되는 공간이 없으나,
데이터 용량이 컴파일시 결정되어 유연하게 사용할 수 없음

6. PC Register, Native Method Stack

PC Register 영역은 스레드가 시작될 때 생성되고 현재 실행중인 JVM명령어의 주소를 저장
Native Method Stack 영역은 C, C++ 등 Java언어가 아닌 실제 실행될 수 있는 다른 기계어를 실행할 수 있는 영역

profile
오히려 좋아, 자 가보자고!

0개의 댓글