[JAVA] JVM의 메모리 구조

2020. 8. 5. 11:17Programming Language/JAVA

반응형

■ JVM 이란? 

JVM(Java Virtual Machine)은
Java로 작성된 애플리케이션을 실행시키기 위해 반드시 필요한 가상 컴퓨터로서,
Java 애플리케이션이 OS와 하드웨어에 독립적으로 실행가능하게 한다.
OS와 하드웨어와의 관계가 독립적이라는 의미는
어떤 OS(Windows, Linux .. ) 라고 하더라도 해당 OS에 실행가능한 JVM만 존재한다면,
Java 애플리케이션이 실행가능하다는 것이다.
단, JVM는 OS에 종속적이기 때문에 해당 OS에서 실행가능한 JVM이 필요하다.

 


■ Java 애플리케이션 실행 구조

예시) OS가 Windows일 경우

 

JVM은 Java 애플리케이션을 OS와 하드웨어에 구애받지 않고 실행가능하게 함으로써
Java 애플리케이션이 한번 작성되면 어떤 환경(OS, 하드웨어)에서든지 실행 가능하게 만들었다.

■ JVM의 메모리 구조

응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고, JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.

■ 메서드 영역(Method Area)

인스턴스 생성을 위한 필요한 클래스 정보와 클래스 변수가 저장되는 공간이다.

각 데이터는 Runtime Constant Pool에서 Reference를 가지고 있어서

물리적 메모리 위치를 참조할 때 사용하게 된다.

 힙(Heap) 영역

인스턴스가 생성되는 공간으로 프로그램 실행 중 생성되는 모든 인스턴스가 이곳에 생성된다.

그 중에는 객체, 배열, Array 등이 있다.

인스턴스에 대한 참조가 이루어지지 않거나, 인스턴스에 사용이 종료되었을 경우에는 

메모리 공간의 효율을 높이기 위해 인스턴스는 가비지 컬렉터(Garbage Collector) 에 의해 삭제된다.

 

예시 1) Person 클래스를 인스턴스화한 스택(Stack)영역 참조변수가

          힙(Heap)공간의 인스턴스를 참조할 경우

예시 2) 스택(Stack)영역 참조변수가 힙(Heap)공간의 인스턴스를 참조하지 않을 경우

 

 스택(Stack) 영역(call stack 또는 execution stack)

메서드의 작업에 필요한 메모리 공간을 제공한다.

즉, 메소드가 작업을 진행하는동안 지역변수, 매게변수, 연산의 결과 등을 저장한다.

그리고 메소드의 작업이 종료되면 메모리공간은 반환되어 비워지고 메소드의 반환값은 

해당 메소드를 호출한 메소드에게 전달된다.

 

예시) A 메소드 내부에서 B 메소드를 호출하고 B 메소드 내부에서 C 메서드를 호출했다는 가정

 

Stack은 후입선출(LIFO : Last In First Out) 자료구조 형식이다.
따라서 Stack의 가장 상위 메서드가 현재 실행중인 메서드이고,
그 아래 메서드가 현재 실행중인 메서드를 호출한 메서드이다.

 PC Register

PC Registers는 Thread가 생성될 때 마다 생기는 공간으로 Thread가 어떠한 명령을 실행하게 될지에 대한 부분을 기록한다.

 Native method stack

자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.

보통 C/C++등의 코드를 수행하기 위한 스택이다.

JNI(Java Native Interface)를 통해 표준에 가까운 방식으로 구현이 가능하다.

반응형