2024/12/24 4

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

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

Java 2024.12.24

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

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 톰켓: 정통 클래스 로더 아키텍처여러 개의 클래스 로더 웹 애플리케이션 별로 격리애플리케이션이 클래스 라이브러리를 독립적으로 사용할 수 있도록 보장한 서버에 여러 버전이 공존할 수 있음 클래스 라이브러리는 웹 애플리케이션에 공유 가능클래스 로더의 위임 모델 활용lib, classes 디렉토리 제공 서버는 웹 애플리케이션들의 영향을 최대한 받지 않아야 함보안과 안정성을 고려하여 격리된 환경을 제공 클래스 라이브러리 디렉토리 (웹 앱 클래스 로더)/lib톰켓 자신과 모든 웹 애플리케이션 /webapp/WEB-INF해당 웹 애플리케이션 핫 스왑 지원 (JSP 클래스 로더)서버를 재시작하지 않고도 수정된 JSP 파일이 즉시 반영됨자동으..

Java 2024.12.24

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

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 JVM 실행 엔진은 해석 실행과 컴파일 실행 두가지 방법으로 코드를 실행함 (선택 가능) 1. 해석 실행인터프리터 해석 과정어휘 분석구문 분석추상 구문 트리 생성인터프리터문장 실행 컴파일 해석 과정어휘 분석구문 분석추상 구문 트리 생성중간 코드 생성최적화목적 코드 생성 2. 명령어 집합스택 기반iconst_1iconst_1iaddistore_0바이트코드 명령어 스트림피연산자 스택을 이용해 동작장점이식성: 하드웨어 의존 X간결: 바이트 명령어 하나당 한 동작 수행 (매개변수 X) 단점속도 느림: 메모리를 빈번하게 접근함 레지스터 기반mov eax, 1add eax, 1매개 변수 2개를 받는 명령어

Java 2024.12.24

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

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 가상머신의 실행 엔진은 순수하게 소프트웨어로만 구현됨명령어 집합의 구조와 실행 엔진을 물리적 제약 없이 원하는 대로 만들 수 있음 1. 런타임 스택 프레임 구조메서드가장 기본적인 실행 단위 스택 프레임메서드 호출과 실행을 뒷받침하는 내부 데이터 구조필요한 깊이에 맞게 계산되어 크기가 정해짐실행중인 메서드의 스택 프레임은 맨 위에 있음 지역 변수 테이블매개 변수와 메서드 안에서 정의된 지역변수 저장하나의 변수 슬롯 범위로 변수 하나가 할당될 수 있음인덱스 방식0: this매개 변수들지역 변수들 피연산자 스택타입 크기 단위: 32비트스택 프레임간 공유상부의 지역 변수 테이블이 하부의 피연산자 스택과 공유됨성능 효율 목적 동적 링크메서드에..

Java 2024.12.24