728x90
자바는 JVM덕분에 OS에 독립적인 특성을 가지고 있다. 그럼 JVM의 어떤 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 알아보자.
자바 컴파일 순서
- 개발자가 Java Source (.java)를 작성한다.
- Java Compiler가 Java Source 파일을 읽어 byte code (.class)로 컴파일한다. 여기서 byte code는 JVM이 읽을 수 있는 코드이다.
- 컴파일된 byte code를 JVM의 Class Loader에게 전달한다.
- Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area의 Method Area. 즉, JVM의 메모리에 올린다.
- Execution Engine은 JVM 메모리에 올라온 byte code들을 명령어 단위로 하나씩 가져와서 실행한다. 이때, 두 가지 방식의 번역방식이 존재한다.
- Interpreter : byte code를 한줄 한줄 읽으면서 OS가 실행할 수 있도록 기계어로 번역하고, 실행한다. 전체적인 실행 속도가 느리다.
- JIT(Just-In-Time) Compiler : static compile 방식으로, 지속적으로 Interpreter 하다가 자주 사용하는 코드의 정보를 실행하기 전에 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하여 캐시에 담아두었다가, 이후에는 바이너리 코드로 직접 실행하는 방식이다.
- 즉, JVM은 내부적으로 어떤 메서드가 얼마나 자주 수행되는지를 확인하고, 핫스팟이라고 판단되면 컴파일을 수행해놓는 것이다.
- 하지만, JIT 컴파일러는 byte code를 native 코드로 전체를 미리 바꿔놓기 때문에 실행은 빠르지만, 변환시에 비용이 발생한다는 단점이 있어 JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않고, Interpreter 방식을 사용하다가 자주 사용되는 코드만 캐싱한다.
인용
[Java] 자바 컴파일 과정 & JVM 내부 구조
자바 컴파일 과정, JVM 내부 구조
velog.io
https://velog.io/@mooh2jj/JIT-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC%EB%9E%80
[Java] JIT 컴파일러란?
JIT라는 것은 Just-In-Time의 약자이다. JIT를 사용하는 언어에는 자바와 .NET 등이 있다. 즉, 자바에서만 사용하는 개념은 아니다.JIT를 좀 더 풀어보면, 동적 변환(Dynamic translation)이라고 보면 된다.이
velog.io
https://kingofbackend.tistory.com/122
[CA] 바이너리 파일과 바이트 파일 그리고 컴파일, 링크
자바의 작동원리를 공부하던 중 바이트 파일과 바이너리 파일의 개념을 숙지해야되서 관련 글을 쓰게 되었습니다. Complie과 Link C언어는 컴파일러에 의해 소스파일(*.c)이 목적파일(*.obj)로 변환될
kingofbackend.tistory.com
728x90
'Language > Java' 카테고리의 다른 글
Math클래스 API (0) | 2023.09.13 |
---|---|
JVM의 CLASSPATH 옵션 (0) | 2023.09.13 |
오버플로우 (overflow) (0) | 2023.09.07 |
각 타입별 값의 범위 (0) | 2023.09.07 |
논리 연산자 &&과 &, ||과 |의 차이 (0) | 2023.09.07 |