자바의 메모리영역
JVM(Java Virtual Machine)의 메모리 영역은 크게 3가지 구역인 메소드 영역 (Method Area), 힙(Heap) 영역 그리고 스택(stack) 영역으로 구분된다. 자바프로그램이 실행되면 데이터의 유형(DATA)타입의 따라 JVM은 운영체제(OS)로부터 받은 메모리를 각각 정해진 용도에맞춰 할당한다.
Stack 영역
- Method 호출과 관련정보를 저장하는데 사용된다.
- 메서드 호출시 스택에 Frame이생성되며 이 Frame에 로컬 변수, Method 매개변수, 중간 연산 결과들이 저장되고 메서드가 종료되면 해당 프레임은 스텍에서 제거된다.
- 이름과 같이 LIFO(Last In First Out) 구조를 뛰고있어 메서드 호출과 복귀가 순서대로 관리할수있다.
Heap 영역
- JVM에서 런타임중 동적으로 할당하는 메모리영역이며 객체와 배열같은 new키워드를 사용하여 힙영역에 동적할당한다.
- Stack 영역과 달리 보관된 메모리호출이 끝나도 삭제되지않고 유지가된다. 어떠한 참조변수도 Heap영역의 Instance를 참조하지않을시 Garbage Collector에의해 정리된다.
- Stack 영역은 쓰레드의 각각 생성되지만, Heap영역은 쓰레드의 곗수와 관계없이 모든 스레드가 공유하는 메모리 영역 하나다. 여러 스레드가 동시에 접근할수있기 때문에 동기화 문제가 발생할수있다.
- Heap영역이 너무 작으면 가비지 컬랙션이 자주발생하여 성능이저하될수있으며, 반대로 너무클시 메모리효율이 떨어질수있다.
컴퓨터의 메모리는 한정적이기떄문에 효율적인 프로그램을 만들기위해서는 JVM의 메모리 구성요소를 더이해하면 좋을꺼같다. 메모리관리는 프로그램의 성능과도 즉결되어있기떄문에 중요한 포인트다.
'Java' 카테고리의 다른 글
[Java]인터페이스 (0) | 2024.08.12 |
---|---|
[Java]모던자바 Stream (0) | 2024.08.09 |
[Java]실행시간 계산법 (0) | 2024.08.05 |
[Java]비교방법 equals()와 ==의 차이 (0) | 2024.08.02 |
[Java]HashMap 사용법 (0) | 2024.07.31 |