자바 메모리 간략

자바에서 사용하는 메모리 영역

  • PC 레지스터
  • JVM 스택
  • 메서드 영역
  • 런타임 상수 풀
  • 네이티브 메서드 스택

GC는 힙 영역에서 발생


힙메모리

클래스 인스턴스, 배열이 힙에 쌓인다. 힙은 공유 메모리라고도 하며 여러 스테드에서 공유하는 데이터들이 저장되는 메모리다.


논힙메모리

  • 메서드 영역 : JVM 스레드에서 공유한다. 이 영역에 저장되는 데이터는 런타임 상수 풀(자바의 클래스 파일에는 cotat_pool이라는정보가 포함되어있다.실제 상수 값도 역기에 포함될 수 있지만, 실행 시에 변하게 되는 필드 참조 정보도 포함된다. 필드 정보에는 메서드 데이터, 메서드와 생성자 코드가 있다.)
  • JVM 스택 : 스레드가 시작할 때 JVM 스택이 생성된다. 이 스택에는 메서드가 호출되는 정보인 프레임이 저장된다. 그리고, 지역 변수와 임시 결과, 메서드 수행과 리턴에 관련된 정보들도 포함된다.
  • 네이티브 메서드 스택 : 자바 코드가 아닌 다른 언어로 된 코드들이 실행하게 돌 때의 스택 정보를 관리한다.
  • PC 레지스터: 자바의 스레드들은 각자의 pc 레지스터를 갖는다. 네이티브한 코드를 제외한 모든 자바 코드들이 수행될 때 JVM의 인스트럭션 주소를 pc 레지스터에 보관한다.


뒷 장에 나오는 GC 방법과 jstat 다루는 내용은 생각보다 양이 많아서 따로 다뤄도 좋을것 같다.


출처 : 자바 성능 튜닝 이야기 이상민 지음