2024/12/24 4

[JVM 밑바닥까지 파헤치기] 10-1. 프런트엔드 컴파일과 최적화: 프런트엔드 컴파일

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다1. 프런트엔드 컴파일java 파일을 class 파일(bytecode)로 변환하는 작업 javac프런트엔드 컴파일러jdk 6부터 표준 자바 클래스 라이브러리에 포함됨 (이전에는 tools.jar에 존재하였음)최적화 작업이 수행되지 않음 컴파일 과정준비플러그인 애너테이션 처리기들을 초기화함구문 분석토큰화추상 구문 트리 생성심벌 테이블 생성심벌 주소, 심벌 정보가 기입됨애노테이선 처리플러그인 애노테이션 처리기를 사용하여 처리함바이트코드 생성문법 검사제어 흐름 분석편의 문법 제거

Java 2024.12.24

[JVM 밑바닥까지 파헤치기] 9. 클래스 로딩과 실행 서브시스템, 사례와 실전

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 톰켓: 정통 클래스 로더 아키텍처항목설명여러 개의 클래스 로더 사용톰캣은 여러 개의 클래스 로더를 사용하여 웹 애플리케이션마다 격리된 클래스 로딩 구조를 유지함공유 라이브러리공통 라이브러리는 클래스 로더 위임 모델을 통해 공유됨 (예: lib, classes 디렉토리 사용)웹 앱 클래스 로더 디렉토리/lib: 톰캣 자체 및 모든 웹앱 공통/webapp/WEB-INF: 개별 웹앱 전용핫 스왑 지원 (JSP)JSP 파일 수정 시 서버 재시작 없이 자동 컴파일 및 적용됨 2. OSGi: 유연한 클래스 로더 아키텍처Java 기반의 동적 모듈 시스템 (OSGi = Open Services Gateway initiative)항목설명번들 (..

Java 2024.12.24

[JVM 밑바닥까지 파헤치기] 8-2. 바이트코드 실행 엔진: 바이트코드 해석

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 JVM 실행 엔진은 해석 실행과 컴파일 실행 두가지 방법으로 코드를 실행함 (선택 가능) 1. 해석 실행단계인터프리터 방식컴파일러 방식1. 어휘 분석소스코드를 토큰 단위로 분리동일2. 구문 분석문법 규칙에 맞는 구조로 변환동일3. 추상 구문 트리(AST)코드의 구조를 트리 형태로 구성동일4. 실행🔁 인터프리터가 AST를 순차적으로 실행🔁 중간 코드 → 최적화 → 목적 코드로 변환 후 실행최적화 여부거의 없음 / 제한적컴파일 단계에서 다양한 수준의 최적화 수행실행 결과한 줄씩 바로 실행 → 느리지만 즉각적 결과 확인 가능실행 전 전체 코드 컴파일 필요 → 실행 속도 빠름대표 언어Python, JavaScript, Ruby 등C, C..

Java 2024.12.24

[JVM 밑바닥까지 파헤치기] 8-1. 바이트코드 실행 엔진: 런타임

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 가상머신의 실행 엔진은 순수하게 소프트웨어로만 구현됨명령어 집합의 구조와 실행 엔진을 물리적 제약 없이 원하는 대로 만들 수 있음 1. 스택 프레임구성 요소설명메서드- 자바 실행의 기본 단위- 메서드 호출마다 스택 프레임 생성스택 프레임- JVM 스택에 생성되는 메서드 실행용 데이터 구조- 실행 중인 메서드의 프레임이 항상 스택의 최상단 스택 프레임 구성 요소항목설명지역 변수 테이블- 메서드의 매개변수와 지역변수 저장- 인덱스 기반 접근 (예: 0 = this, 1 = 첫 번째 매개변수)- 32비트 단위 슬롯 사용 (long, double은 2슬롯)피연산자 스택- JVM 명령어 실행 시 사용하는 임시 저장소- 연산 결과 저장- 32비..

Java 2024.12.24