DevBook/JVM 밑바닥까지 파헤치기
-
[JVM] 컴파일과 최적화 (1) - 프론트엔드 컴파일과 최적화DevBook/JVM 밑바닥까지 파헤치기 2025. 4. 6. 15:12
'컴파일타임'이라고 하면 뜻이 모호할 수 있음프론트엔드 컴파일러가 *.java 파일을 *.class 파일로 변환하는 과정도 컴파일이고, JVM에서 JIT 컴파일러가 바이트코드를 기계어로 변환하는 과정도 컴파일임. 또한 AOT 컴파일러를 사용하여 특정 하드웨어용 바이너리 코드로 곧바로 컴파일하는 방식도 있음javac와 같은 프론트엔드 컴파일러는 코드 실행 효율 측면의 최적화는 거의 하지 않음성능 최적화를 런타임 컴파일러에 집중하기로 결정했기 때문임javac로 생성하지 않는 클래스 파일(ex. JRuby, 그루비 등으로 작성한 클래스 파일)들도 최적화 효과를 공평하게 누리도록 하기 위해서임한편 '최적화'의 범위를 개발 단계까지 포함시킨다면 javac는 개발자가 작성하는 코드를 단순화하는 등 코딩 효율을 개선..
-
[JVM] 바이트코드 실행 엔진DevBook/JVM 밑바닥까지 파헤치기 2025. 4. 5. 17:52
는 바이트코드 실행 엔진의 개념 모델을 정의함가상 머신 구현에서 실행 엔진이 바이트코드를 실행하는 방법은 해석 실행(인터프리터를 통한 실행)과 컴파일 실행(JIT 컴파일러로 네이티브 코드 생성 후 실행) 중 하나임실행 엔진 하나에서 둘 다 포함할 수도, 수준이 다른 여러 JIT 컴파일러를 혼용할 수도 있음여기서는 개념 모델 관점에서 가상 머신의 메서드 호출과 바이트코드 실행에 대해 설명함 런타임 스택 프레임 구조JVM은 메서드를 가장 기본적인 실행 단위로 사용하고, 메서드 호출과 실행을 뒷받침하는 내부 데이터 구조로 스택 프레임을 이용함스택 프레임은 JVM 런타임 데이터 영역에 있는 '가상 머신 스택'의 요소이기도 함스택 프레임에는 메서드의 지역 변수 테이블, 피연산자 스택, 동적 링크, 반환 주소와 같..
-
[JVM] 가상 머신 실행 서브시스템 (2) - 클래스 로딩 메커니즘DevBook/JVM 밑바닥까지 파헤치기 2025. 4. 1. 00:35
들어가기 전,클래스 파일에 서술된 정보를 가상 머신이 사용하려면 먼저 로드해야 함가상 머신이 클래스 파일을 로드하는 방법, 그 정보를 가상 머신 안에서 활용하는 방법에 대해 설명함JVM은 클래스를 설명하는 데이터를 클래스 파일로부터 메모리로 읽어 들이고 그 데이터를 검증, 변환, 초기화하고 나서 최종적으로 가상 머신이 곧바로 사용할 수 있는 자바 타입을 생성함이 과정을 가상 머신의 클래스 로딩 메커니즘이라고 함자바에서는 클래스 로딩, 링킹, 초기화가 모두 '프로그램 실행 중에' 이루어짐자바가 동적 확장 언어 기능을 제공할 수 있는 것은 런타임에 이루어지는 동적 로딩과 동적 링킹 덕분임이와 같이 어플리케이션을 동적으로 조합하는 기법은 가장 기초적인 예인 JSP부터 비교적 복잡한 OSGi 기술에 이르기까지 ..
-
[JVM] 가상 머신 실행 서브시스템 (1) - 클래스 파일 구조DevBook/JVM 밑바닥까지 파헤치기 2025. 3. 29. 23:28
JVM이 제공하는 언어 독립성JVM은 플랫폼 독립성을 넘어 언어 독립성을 제공함JVM이 다양한 플랫폼을 지원하고, 모든 VM이 동일한 프로그램 저장 형식(바이트코드)을 지원한다는 사실은 플랫폼 독립성의 핵심임JVM은 자바를 포함해 어떠한 프로그래밍 언어에도 종속되지 않음'클래스 파일'이라는 특정한 바이너리 파일 형식에만 의존할 뿐임는 클래스 파일이 여러 가지 필수 구문을 갖추고 특정 구조를 따르도록 제약하고 있음다른 언어에서도 JVM은 하드웨어 독립적인 범용 실행 플랫폼으로 활용할 수 있고, 클래스 파일은 프로그램을 전달하는 매체로 이용할 수 있음자바 언어의 다양한 구문, 키워드, 상수, 변수, 연산 기호는 결국 바이트코드 명령어 조합으로 표현됨 클래스 파일의 구조클래스 파일은 바이트(byte)를 하나의..