java 파일이 자바 컴파일러에 의해 class 파일로 변환되고, class 파일이 Class Loader에 의해 JVM Runtime Data Area에 올라가면 실행엔진에 의해 실행된다.
관련 정리글
https://bangbaeking.tistory.com/87
[Java] JVM , Java compiler, Java 코드 실행과정 JDK,JRE,JVM
JVM이란? Java Virtual Machine 자바 가상 기계이다. Java는 운영체제에 종속적이지 않고, 작성된 Java 코드가 JVM에서 OS가 해석할수있는 bytecode로 변환해준다. ( OS에 종속적이지 않다 - 맥에서 작성된 Java
bangbaeking.tistory.com
Class Loader, Execution Engine, Garbage Collector, Runtime Data Area에 대해 더 자세히 알아보자
Class Loader, Execution Engine, Garbage Collector
- Class Loader
- JVM 안으로 클래스 파일을 로드하고, 링크를 통해 배치 작업을 수행하는 모듈이다. 런타임 시에 동적으로 클래스를 로드한다.
- Execution Engine
- 클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명렁어 단위로 읽어서 실행한다.
- 처음에는 인터프리터 방식이여서 속도가 느리다는 단점이 있었지만 JIT 컴파일러를 통해 인터프리터 방식의 단점을 보완헀다.
- JIT 는 속도는 빠르지만 비용이 더 발생해 모든 코드를 JIT 로 변환하지는 않고 인터프리터 방식을 사용하다가 일정기준이 되면 JIT 컴파일러 방식으로 변환한다.
- Garbage Collector
- Garbage Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는데 언제 GC가 작동하는지 정확히 알 수 없다.
- Garbage Collector에 대해서는 나중에 자세히 다시 알아보자
- https://bangbaeking.tistory.com/94
[Java] Garbage Collection
Garbage Collection이란 가비지 컬렉션이란 자바의 메모리 관리 방법으로 JVM의 Heap영역에서 동적으로 할당된 메모리중 필요 없어진 메모리 객체를 자동으로 주기적으로 제거하는 프로세스이다. Garbag
bangbaeking.tistory.com
Runtime Data Area
Runtime Data Area는 5개의 영역으로 나누어저있다.
- Method area
- 모든 쓰레드가 공유하는 메모리 영역으로 클래스, 인터페이스, 메소드, 필드, Static, 변수등의 바이트 코드를 저장한다.
- Heap area
- Method 영역과 마찬가지로 모든 쓰레드가 공유하는 영역으로 new 키워드로 생성된 객체와 배열이 생성되는 영역이다. GC가 참조하지 않는 메모리를 확인하고 제거해준다.
- Stack area
- 메소드를 호출할때 마다 각각의 스택이 생성되고 지역변수, 파라미터, 리턴값 등 임시 값들이 저장된다.
- 객체를 생성할때 Object obj = new Object(); Object obj 은 스택에 저장되고, 해당 객체의 인스턴스는 힙 영역에 저장된다. (new 연산자로 생성된 객체와 배열은 heap 영역에 저장된다.) 스택에 힙 영역의 주소값을 저장하고있음
- PC Register
- 쓰레드가 시작될때 생성되며 현재 쓰레드가 실행되는 부분의 주소와 명령을 저장한다.
- Native method stack
- 자바외의 언어로 작성된 네이티브 코드를 위하 메모리 영역이다. 보통 c/c++등의 코드를 수행하기 위한 스택이다.
Reference
'Java , Spring > Java' 카테고리의 다른 글
[Java] Garbage Collection (1) | 2024.01.15 |
---|---|
[Java] JIT 컴파일러 (인터프리터와 컴파일) (0) | 2024.01.12 |
[Java] String, StringBuffer, StringBuilder 차이 및 장단점 (0) | 2024.01.10 |
[Java] String 특징, String Pool (1) | 2024.01.10 |
[Java] JVM , Java compiler, Java 코드 실행과정 JDK,JRE,JVM (0) | 2024.01.09 |
댓글