본문 바로가기

cs(with 매일메일)

[260205목] 자바 프로그램이 실행되는 흐름을 설명해주세요.

.java > JDK에 포함됨 javac(java complier)를 통해 컴파일된다. 

JVM이 이해할 수 있는 바이트 코드로 변환되어 .class 파일 생성

 

지금부터 JVM이 담당. 클래스 로더가 바이트 코드를 JVM메모리에 동적으로 로드

로드된 바이트 코드는 Method Area에 저장. 

실행 엔진이 로드된 바이트 코드를 실행. 

 

바이트 코드 > 인터프리터와 JIT컴파일러를 함께 사용하여 기계어로 변환.

인터프리터는 바이트 코드를 한 줄씩 읽어서 실행하는 방식. JIT컴파일러는 자주 실행되는 메서드를 감지하면 해당 메서드 전체를 네이티브 코드로 변환하여 캐싱한다. 

 

클래스 로더가 바이트 코드를 JVM메모리에 동적으로 로드?

프로그램이 시작될 때 모든 클래스를 한꺼번에 로드하는것이 아니라

런타임 시점에 필요한 메서드만 로드하는 것을 의미.

- 인스턴스 생성

- static 메서드나 변수 사용, 값 할당

 

바이트 코드 > 인터프리터와 JIT컴파일러를 함께 사용

- 인터프리터 : 바이트 코드를 한 줄 씩 읽어서 실행 > 초기 실행 속도가 빠름. 하지만 같은 코드가 반복적으로 실행될 경우 매번 해석해야 해서 성능 저하. 

- JIT컴파일러는 자주 실행되는 메서드를 네이티브 코드로 변환하여 캐싱하는 역할.