반응형
JAVA는 프로그램이 실행되는 동안 JVM은 다양한 메모리 영역을 사용하여 데이터를 관리한다. 이는 프로그램의 성능과 안전성에 매우 중요한 역할을 한다. 이번 포스팅은 JAVA 런타임 메모리 영역에 대해 알아보도록 하겠다.
Method area
메서드 영역은 클래스에 대한 메타 데이터를 저장하는 곳으로 모든 스레드에 공유되며 저장되는 정보는 아래와 같다.
- 클래스 정보 : 이름, 부모클래스 정보, 인터페이스 정보 등
- 메서드 정보 : 이름, 매개변수, 리턴 타입 등
- 필드 정보(클래스의 static 변수) : 이름, 타입 , 접근제어자 등
- Runtime constant pool : 문자열 리터럴, static final 상수, 클래스 및 메서드의 참조 정보 등
Heap area
모든 객체와 배열이 동적으로 할당되는 곳이다. 이 영역은 JVM에 의해 관리되며, 가비지 콜렉터가 주기적으로 사용하지 객체를 정리한다.
- eden space: 새로운 객체가 할당되는 부분
- survivor space : 주기적으로 cg가 사용중인 객체를 담아두는 장소
- Old Generation: survivor space1, 2 를 오가며 오래 살아남은 객체가 이동하는 영역으로 장기적으로 사용되는 객체를 담아두는 장소.
Stack area
스택 영역은 각 스레드마다 별도로 생성되는 공간으로 메서드 호출시 생성되는 프레임(메서드의 매개변수, 지역변수, 리턴 주소, 연산 중 발생한 임시데이터 등)을 저장한다. 메서드 호출시마다 프레임이 추가되고 종료되면 제거 된다.
PC register
각 스레드 마다 하나씩 존재하면서 현재 수행중인 jvm 명령의 주소를 저장하여 실행흐름을 제어한다. 현재 실행중인 명령어가 끝나면 다음 명령어의 주소로 업데이트된다.
Native method stack
java는 플랫폼 독릭적 언어이지만 때때로 성능이나 시스템 리소스에 접근을 위해 타 플랫폼 종속 코드를 작성하기도 한다. 네이티브 메서드 스택은 이러한 네이티브 메서드를 실행하기 위한 메모리 영역이다.
네이티브 메서드란?
java가 아닌 다른 언어, C나 C++ 등으로 작성된 메서드를 의미하며 이러한 메서드는 JNI(Java Native Interface)를 통해 호출 될 수 있다.
반응형
'Back-end > JAVA' 카테고리의 다른 글
[JAVA] 추상 클래스 (Abstract Class)란 무엇인가? (0) | 2025.01.09 |
---|---|
[JAVA] 부동소수점에 대해 - 0.1 + 0.2 = 0.300...4? (0) | 2024.07.12 |
[JAVA] 싱글톤 패턴(Singleton pattern) 사용법과 장단점 (0) | 2024.07.09 |
[JAVA] 자바의 인터페이스(interface)란? 게임으로 알아보는 사용이유 (0) | 2024.07.04 |
[JAVA] 접근 제어자(public, protected, default, private) (0) | 2024.07.03 |