JVM (Java Virtual Machine)

클래스파일 (바이트 코드)을 OS에 맞게 해석해준다.

클래스파일이 JVM에서 실행되기 때문에 OS가 달라져도 다시 컴파일하지 않아도 된다.

즉, 운영체제에 의존적이지 않고 독립적으로 JAVA프로그램이 실행된다.


그림 출처: http://limkydev.tistory.com/51



JAVA 실행 과정 및 JVM 메모리 구조

그림 출처: http://limkydev.tistory.com/51


JAVA는 소스파일을 컴파일해서 바이트코드인 클래스파일로 만들고 자바 가상머신을 통해 실행할 수 있다.


class 파일

java파일이 컴파일러에 의해 class파일이 되는데,  이 파일은 자바 환경에서 실행되기 위해 최적화된 코드인 Byte Code로 구성된다.

Byte Code는 기계어가 아니기 때문에 OS에서 바로 실행하지 않는다.


Class Loader

JVM 내로 class 파일을 로드하고 Link 작업을 통해 배치 등의 작업을 한다. 런타임시에 클래스를 로드한다.

Execution Engine

Class Loader를 통해 JVM 내부로 넘어와 Runtime Data Area(JVM 메모리)에 배치된 Byte code들을 명령어 단위로 실행시킨다. Garbage Collector

생성된 객체의 생존 여부를 판단하여, 더이상 참조되지 않거나 null 인 객체의 메모리를 해체시켜 메모리를 반납한다. Runtime Data Areas (JVM 메모리)

Java 어플리케이션이 실행하면서 할당받은 메모리 영역이다.



Method Area

프로그램 실행 중 어떤 클래스가 사용되면 JVM은 해당 클래스의 클래스 파일을 읽어 클래스에 대한 정보를 이 곳에 저장한다.

클래스의 클래스 변수(static) 또한 함께 존재한다.


Heap Area

프로그램 실행 중 생성되는 인스턴스는 모두 이 곳에 생성된다.

즉, 인스턴스 변수들이 생성되는 공간이다.


Stack Area

메서드가 호출되면 이 곳에 호출된 메서드를 위한 메모리가 할당되며

이 메모리는 메서드가 작업을 수행하는 동안 지역변수, 매개변수, 연산의 중간 결과 등을 저장하는데 사용된다.

메서드가 작업을 마치면 할당되었던 메모리 공간은 반환되어 비어진다.




참고 출처

- http://limkydev.tistory.com/51

- 자바의 정석

+ Recent posts