코딩못하는사람

JVM 메모리 구조 정리 본문

자바 메모장/개념 및 문법

JVM 메모리 구조 정리

공부절대안함 2021. 2. 9. 11:47

Java Virtual Machine(JVM)이란?

java와 운영체제(OS) 사이에서 중계자 역할을 해준다.

자바가 운영체제 종류,플랫폼에 관계없이 독립적으로 실행 가능하도록 해준다.

메모리 관리를 GC를 통해서 자동으로 해준다.

 

왜 JVM 메모리 구조를 알아야 할까?

메모리 설계가 잘되어 있는 프로그램에 비해 메모리 고려가 되지 않은 프로그램은 속도 저하 현상이나 튕김 등의 현상이 일어날 확률이 크다.

결과적으로, 같은 기능의 프로그램이라 하여도 메모리의 관리에 따라 성능이 차이가 나게 된다. 

따라서 메모리 구조를 파악하고 한정된 메모리를 효율적으로 사용해야 한다.

 

자바 실행 과정

https://hoonmaro.tistory.com/19

-Java Compiler: Java source(.java)파일을 바이트 코드로 바꿔 .class파일로 만들어 준다.

 

-Class Loader:만들어진 class파일을 JVM내로 load하고 배치시킨다.

 

-Execution Engine: 배치된 Byte code를 명령어 단위로 실행한다.

 

-Garbage Collector: 어플리케이션이 생성한 객체(인스턴스)의 생존여부를 판단해서 더이상 참조되지 않거나 null인 객체의 메모리를 해제시킨다.

 

-Runtime Data Area: JVM이 실행되면서 할당받은 메모리 공간이다.

 

Runtime Data Area

https://hoonmaro.tistory.com/19

 

-Method Area: 클래스,인터페이스에 대한 런타임 상수풀, 메서드, 필드,생성자,타입 정보, static 변수 ,static메서드 ,바이트 코드등을 보관한다. 전체 thread에서 공유할 수 있고, 시작시에 생성되서 종료될 때 까지 존재한다. 따라서 전역변수를 너무 많이 쓰게되면 메모리 초과 위험이 있다.

 

-Runtime constant pool:각 class,interface는 각각의 런타임 상수풀을 가진다. 상수들은 메서드와 필드,데이터들의 래퍼런스 값을 가지고 있다. 중복되는 정보가 필요하게 되면 런타임 상수풀에서 꺼내서 사용한다. (symbol table)

 

-Heap Area: 래퍼런스 타입을 갖는 객체(인스턴스),배열 등이 동적으로 생성되서 저장되는 곳이다. new 연산자를 통해 heap영역에 객체를 생성해서 메모리를 부여받고 stack영역에 참조변수에 실제 객체의 레퍼런스 값을 리턴받는다. 이 래퍼런스 값을 통해서만 객체를 다룰 수 있다.

 

-Stack Area: 각 스레드 시작시에 하나씩 할당되고 종료될 때 해제된다.메소드 호출시에 프레임을 추가하고(push) 종료되면 제거한다(pop). 지역변수, 매개변수, 메서드 정보들의 임시 데이터가 저장된다.

primitive타입 변수는 스택 영역에 직접 값을 가진다.reference 타입의 변수는 힙 영역이나 메소드 영역의 객체 주소를 가진다.

 

-PC Register:현재 실행중인 JVM 주소를 저장한다.

프로그램 실행은 CPU에서 인스트럭션(Instruction)을 수행.

-Native Method Stack Area:자바 외 언어로 작성된 네이티브 코드를 위한 메모리 stack이다.

Java Native Interface를 통해 호출되는 C/C++등의 코드를 수행하기 위한 스택이다.

 

위에 3가지 영역은 모든 스레드에서 공유하고 밑 3가지 영역은 각 스레드에서만 사용 할 수 있다.

 

https://limkydev.tistory.com/51

 

 

 

 

출처 및 공부한 곳: https://hoonmaro.tistory.com/19 [훈마로의 보물창고] limkydev.tistory.com/51

Comments