본문 바로가기
어차피 공부는 해야한다./java

[메모리] 자바의 메모리 영역

by 눕는게최고야 2023. 5. 22.

자바가 실행되면 JVM(자바 가상 머신)이 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리한다.

 

JVM의 메모리 공간은 크게 

1. Static 영역

2. Stack 영역

3. Heap 영역

1. Static 영역

클래스와 인터페이스에 대한 런타임 상수..? , 필드변수, 클래스 변수, 상수, 생성자, 메서드를 저장한다

Static 영역은 어느 곳에서나 접근이 가능하다. 따라서 무분별하게 사용할 경우 메모리 낭비를 초래할 수 있다.

 

2. Stack 영역

지역변수의 데이터 값이 저장되는 공간.

Primitive 타입의 데이터에 해당되는 지역변수, 매개변수 데이터 값이 저장.

메서드가 호출될 때, 메모리가 할당되고 메서드가 종료되면 메모리에서 사라짐

Stack 영역의 메모리 초과 > java.lang.stackOverFlowError 발생

 

3.Heap 영역

Reference 데이터 타입을 갖는 객체, 배열 등이 저장되는 공간.

stack 영역에는 Heap영역의 오브젝트를 가르키는 (주소) 변수를 stack에 저장

Heap 영역에서는 보관되는 메모리가 호출이 끝나도 삭제가 되지 않는다. 추후 가비지 컬레거에 의해 청소

Heap 영역의 메모리 초과 > java.lang.outOfMemoryError 발생

 

진짜 정리가 기가막히게 되어있습니다.

(출처 :https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD%EC%8A%A4%ED%83%9D-%ED%9E%99)