자바의 메모리 영역은 크게 메서드 영역, 힙, 스택으로 나눌 수 있다. 각 영역들이 어떤 역할을 하는지는 차치하고 근본적으로 왜 메모리 영역을 세분화해서 나눈 것일까라는 의문이 들었다.
1. 효율적인 메모리 관리.
메모리를 영역별로 나누어 관리함으로써 자원을 효율적으로 사용할 수 있다. 예를 들어 힙 영역은 동적으로 생성되는 객체와 배열을 저장하는데 사용되는데, 힙은 필요에 따라 크기를 동적으로 조절할 수 있어 유연한 메모리 할당이 가능하다. 또 스택영역은 메서드 호출과 관련된 정보를 저장하여 메서드의 실행흐름을 관리하고 지역변수를 효율적으로 할당할 수 있다.
2.JVM의 독립성
메모리 영역을 세분화함으로써 다양한 플랫폼과 운영 체제에서 동일한 바이트코드를 실행할 수 있다. 각 플랫폼에 맞게 메모리영역을 구성하여 호환성을 높인다.
3.안전성과 보안
메모리 관리와 이에 관련된 보안을 강화할 수 있다. 힙 영역에서 객체의 생성과 소멸을 자동으로 처리하는 가비지 컬렉션은 메모리 누수와 관련된 문제를 예방, 또한 메서드 영억은 클래스의 구조 정보를 저장하여 클래스 로딩 시에 무결성 검사를 수행하여 보안 위협으로부터 안전한 실행을 보장
4.실행 시스템 제어
JVM은 자바 프로그램을 효율적으로 제어.
메서드 영역
클래스의 바이트코드, 상수, 정적 변수 등이 저장되는 영역. JVM이 시작될 때 생성되며 모든 스레드가 공유. 이 영역에는 클래스와 인터페이스의 구조 정보가 저장
힙
객체와 배열이 할당되는 영역. 힙은 동적으로 생성된 객체의 인스턴스를 저장하고 가비지 컬렉터에 의해 관리. 메모리 크기가 미리 정해져있지 않으며 필요에 따라 조절가능
스택
각 스레드마다 개별적으로 할당되는 영역으로 메서드 호출과 관련된 정보를 저장. 메서드가 호출될 때마다 스택 프레임이 생성되며 메서드 실행이 종료되면 해당 스택 프레임도 제거. 스택은 지역변수, 매개변수, 메서드 호출 및 반환 값등을 저장
추가적으로 스택 영역에는 스택 프레임이라는 작은 메모리 블록들이 생성되며 저장. 각 스택 프레임은 메서드 호출에 대응하며 메서드 실행 시 필요한 정보를 저장.
1.지역 변수
메서드 내에서 선언된 변수들은 스택 영역에 할당. 이 변수들은 메서드 실행 도중에만 유효하며 해당 메서드가 실행중이 아니라면 스택에서 제거. 스택 프레임은 각 메서드의 지역 변수 공간을 제공하여 변수들을 효율적으로 할당
2.매개변수
메서드 호출 시 전달된 인자값은 스택 프레임에 매개변수로 저장. 메서드 내에서 매개변수로 사용되며, 지역변수와 마찬가지로 메서드의 실행이 종료되면 스택에서 제거
3.메서드 호출 정보
호출된 메서드의 주소, 호출한 메서드의 주소등이 포함되어 있으며 이를 통해 메서드의 실행 흐름을 관리
스택 영역은 메서드의 호출에 따라 스택 프레임이 동적으로 생성되고 제거되는 특성을 가지기 때문에 각 메서드 호출이 독립적으로 실행되고 지역 변수가 서로 간섭하지 않음. 이를 통해 메서드의 실행 과정에서 지역 변수의 할당과 해제가 자동으로 관리되며 메모리 사용을 효율적으로 조절
'공부하면서 생긴 질문들 > Java' 카테고리의 다른 글
Exception 1 (0) | 2023.06.14 |
---|---|
Annotation (0) | 2023.06.14 |
Transaction (0) | 2023.06.13 |
Static (0) | 2023.06.13 |
Hash code와 toString() (0) | 2023.06.13 |