자바의 실행 과정

- 개발자가 java언어로 코딩한 파일을 컴파일러(javac)를 이용하여 바이트 코드인(.class)파일로 변환해준다.
- 변환한 클래스 파일을 클래스 로더(Class Loader)를 이용하여 JVM에 로딩시켜준다.
- 그 후, JVM의 Execution engine을 통해 클래스 파일을 해석합니다.
- 해석된 바이트 코드를 가지고 최종적으로 Runtime Data Areas에 배치되어 프로그램이 실행됩니다.
JVM(Java Virtual Machine)?
각 OS마다 따로 코드를 작성해야 하는 번거로움 없이, 플랫폼에 독립적일 수 있게 만들어주는 자바 가상 머신이다.
JVM의 구성요소?
1. Class Loader (클래스 로더)
- JVM내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈입니다.
2. Execution Engine (실행 엔진)
- 클래스를 실행시키는 역할이며, JVM내에서 기계가 실행할 수 있는 형태로 변환을 합니다.
3. Interpreter (인터프리터) - 실행엔진의 방식 1
- 실행 엔진은 자바 바이트코드(클래스파일)을 한 줄씩 실행합니다. 하지만 한 줄씩 수행하기 때문에 느립니다.
4. JIT 컴파일러 (Just - In - Time) - 실행엔진의 방식 2
- 인터프리터의 효율을 높이기 위한 컴파일러이며, 인터프리터에서 반복되는 코드를 발견시 JIT에서 반복되는 코드를 네이티브 코드로 바꿔줍니다.
- 그 다음 부터는 인터프리터는 네이티브 코드로 컴파일 된 코드를 바로 사용합니다.
5. GC (가비지 컬렉터)
- 자바에서 힙영역의 사용하지 않는 객체들을 자동으로 해제해주어 메모리를 자동으로 관리해준다.
- 다음 포스트에서 세부적으로 다룰것입니다.
6. Runtime Data Area
- 프로그램이 실행 중에 사용되는 다양한 영역이며, 아래와 같습니다.

PC Register
Thread가 실행 될때 생성되며 현재 수행중인 JVM명령의 주소를 갖습니다.
JVM 스택 영역
지역 변수, 파라미터 등이 생성되는 영역이며, 실제 객체는 Heap에 할당되고, 값들만 저장되는 영역이다.
Native Method Stack
바이트 코드가 아닌 실제 실행 가능한 기계어로 작성된 프로그램을 실행 시키는 영역이다. JNI를 사용하여 바이트 코드로 전환하여 저장하게 된다.
위 글에서 고칠점이나 추가할점 & 의견 있으시면 댓글 부탁드립니다! 감사합니다!
반응형
'Java > Java language' 카테고리의 다른 글
| [JAVA]14. String / StringBuilder /StringBuffer ? 차이점 (0) | 2022.04.10 |
|---|---|
| [JAVA]13. GC(가비지 컬렉터)? (0) | 2022.03.27 |
| [JAVA]11. 객체지향 프로그래밍(OOP)의 SOLID 5대원칙? (0) | 2022.03.11 |
| [JAVA]10. 컬렉션 구조 (Set과 Map) (0) | 2021.08.14 |
| [JAVA]9. 컬렉션 구조 -1 (List ) + Stack (0) | 2021.08.14 |
댓글