-
Java Compile 과정Java, Kotlin, Spring 2022. 5. 7. 09:57
JVM (Java Virtual Machine)
자바는 JVM(Java Virtual Machine) 위에서 동작하기 때문에, OS 에 비종속적이다. JVM 은 자바에 대해서 모른다. 컴파일된 바이트 코드 파일을 해석하는 능력을 가지고 있을 뿐 이다. 따라서, JVM 이 해석할 수 있는 형태의 바이트 코드를 JVM 에 제공한다면, 꼭 자바가 아니더라도 JVM 을 사용할 수 있다. Kotlin 이 대표적이다.
Java Compile 과정
- 자바언어로 소스코드 (.java) 를 작성한다.
- Java Compiler 가 자바 소스파일을 컴파일 한다. 이 때 JVM 이 해석할 수 있는 형태의 파일인 바이트 코드 파일 (.class) 이 생성된다. 바이트 코드의 각 명령어는 1 바이트 크기의 Opcode 와 추가 피연산자로 이루어져 있다.
- 컴파일된 바이트 코드를 JVM 의 클래스 로더 (Class Loader) 에게 전달한다.
- 클래스 로더는 동적 로딩 (Dynamic Loading) 을 통해 필요한 클래스들을 로딩 및 링크하여 JVM 의 메모리인 런타임 데이터 영역 (Runtime Data Area) 에 로드한다.
- 실행 엔진 (Execution Engine) 은 JVM 메모리에 올라온 바이트 코드들을 실행한다. 실행 방법은 2 가지가 있다.
- 인터프리터 방식 : 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행한다. 하나씩 실행하므로 전체 실행 속도가 느린 단점이 있다.
- JIT 컴파일러 (Just-In-Time Compiler) : 인터프리터의 단점을 보완하기 위해 도입된 방식으로 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에는 해당 메서드를 더 이상 해석하지 않고, 바이너리 코드로 직접 실행하는 방식이다. 바이트 코드를 한번에 컴파일 하기 때문에 컴파일 시간은 늘어나지만 전체 실행속도는 인터프리팅 방식보다 빠르다.
출처
- https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-1.html#jvms-1.2
반응형'Java, Kotlin, Spring' 카테고리의 다른 글
JVM 메모리 구조 (0) 2022.05.20 @SpringBootApplication 어노테이션 (0) 2022.05.20 Testcontainers 재사용 설정하기 (0) 2022.01.12 스프링 배치 완벽가이드 2/e - 2장 스프링 배치 (0) 2022.01.12 스프링 배치 완벽가이드 2/e - 1장 배치와 스프링 (0) 2022.01.12