[JAVA] 메모리 구조 in JVM

무지성개발자·2023년 7월 29일

자바는 JVM을 통해 실행된다. 프로그램이 실행되면 JVM은 OS로부터 프로그램을 수행하는데 필요한 메모리(32MB ~ 256MB)를 할당 받는다.


런타임 데이터 영역

메소드 영역

Static영역 또는 클래스 영역이라고도 불린다.

  • 클래스, 인터페이스 정보가 올라간다.

  • 패키지 정보가 올라간다.

  • static 멤버들이 올라간다.

  • JVM이 시작될 때 클래스 로더에 의해 로드되며, 프로그램이 종료될 때까지 유지.

  • 모든 스레드가 공유한다.


힙 영역

동적으로 생성된 인스턴스(객체)가 저장되는 영역이다.

  • new 키워드를 통해 생성된 객체가 올라간다.

  • 참조 되지 않는 객체들은 GC에 의해 제거 된다.

  • 자바 VM option을 통해 설정 할 수 있다.

  • 모든 스레드가 공유한다.


스택영역

Priveite type 변수들이 저장되고, 임시로 사용되는 변수, 데이터를 저장한다.

  • 스레드 별로 할당한다.

  • 메서드가 호출 될 때마다 메서드의 지역변수, 매개변수, 임시데이터가 저장된다.

  • 메서드가 종료되면 pop()으로 늦게 들어온 데이터부터 지워진다.

  • LIFO방식이어서 메서드에서 메서드를 호출하면 마지막 메서드 정보부터 지워진다.


PC 레지스터

Personal Computer가 아니라 Program Counter의 PC다.

  • 스레드 별로 할당한다.

  • 현재 사용중인 JVM 명령어의 위치를 가르킨다.

  • 다음에 실행할 JVM 명령어를 지정한다.


네이티브 메소드

자바 코드가 아닌 다른 언어로 작성된 코드를 저장하는 공간.

  • JNI(java native interface)통해 호출.

  • C, C++등의 코드를 수행하기 위한 공간.

  • 바이트 코드가 아닌 실제 실행되는 기계어로 작성된 프로그램 실행 시키는 영역.


한 줄평 : 메모리 구조에서 Heap 과 Stack은 동작원리도 잘 알아둬야 한다.

참고 -
https://www.youtube.com/watch?v=AWXPnMDZ9I0&ab_channel=%EC%9D%B4%EC%A0%95%EB%A1%9D
https://tape22.tistory.com/28

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글