2024/12/25 4

[JVM 밑바닥까지 파헤치기] 12-1. 자바 메모리 모델과 스레드: 동시성

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 컴퓨터가 여러 작업을 동시에 수행하는 이유연산 성능과 저장 및 통신 성능의 격차가 크기 떄문프로세서가 요청한 자원의 대기 시간을 활용서버는 여러 클라이언트 요청을 동시에 처리하므로 동시 처리가 필수적 JVM은 동시성 프로그래밍의 어려움을 낮춰줌하드웨어 자원 분배동시성 프로그래밍 2. 하드웨어의 효율과 일관성캐시메모리 I/O는 연산작업에 비해 매우 느림이를 보완하고자 메모리와 CPU 사이의 계층을 둠필요한 데이터를 캐시에 복사해 두어 작업을 빠르게 수행작업이 완료되면 결과 데이터를 캐시에서 메모리로 동기화 공유 메모리 멀티프로세스 시스템프로세서별 캐시는 각각 존재캐시 일관성 프로토콜공유 공간인 메인 메모리와 동기화를 수행MSI, ..

Java 2024.12.25

[JVM 밑바닥까지 파헤치기] 11-2. 백엔드 컴파일과 최적화: JIT 컴파일러

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 적시 컴파일러핫코드들을 탐지하여 컴파일하고 최적화하여 실행 효율을 높임 2. 내장 컴파일러클라이언트 컴파일러빠른 컴파일과 기본 최적화 서버 컴파일러서버측 성능을 극대화하도록 설정된 컴파일러 고급 최적화죽은 코드 제거, 순환문 언롤링, 순환문 표현식 호이스팅범위 검사 제거, null 검사 제거 3. 계층형 컴파일서버 모드의 기본 컴파일 전략 계층 0인터프리터로 실행프로파일링 X 계층 1클라이언트 컴파일러 사용프로파일링 X기본 최적화만 계층 2클라이언트 컴파일러 사용기본 프로파일링만 (메서드 통계) 계층 3클라이언트 컴파일러 사용모든 프로파일링 계층 4서버 컴파일러 사용모든 프로파일링모든 최적화 4. 컴파일 대상과 촉발 조건핫코드자..

Java 2024.12.25

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

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다1. 백엔드 컴파일클래스 파일을 로컬 환경에 맞는 네이티브 코드로 변환하는 과정성능을 결정하는 핵심 지표필수 X (명세 존재하지 않음) 2. 인터프리터컴파일 단계없이 즉시 실행초기 실행 속도가 빠름소량의 메모리 환경에서 유리컴파일러의 최적화 동작이 잘못될 경우 차선책으로 사용됨프로파일링 수행 (최적화된 컴파일을 위함) 3. 컴파일러프로그램이 실행되는 시간이 길 경우 유리자주 실행되는 코드를 네이티브 코드로 컴파일해 실행 효율이 높임

Java 2024.12.25

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

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 제네릭매개 변수화된 타입 또는 매개 변수화된 다형성 타입 소거동작 원리컴파일 타임에만 타입 정보 확인런타임에는 타입 정보 제거원시타입으로 변환됨타입이 같은 모든 제네릭 인스턴스의 공통 상위 타입타입캐스팅 관련 바이트코드가 자동으로 삽입됨 특징제네릭 타입과 상관없이 타입이 동일함 장점하위 호환성현재 버전보다 낮은 버전에서 실행될 수 있음 타입 안정성컴파일 타임에 타입 체크 단점제약사항if (item instanceof E) {} // XE newItem = new E(); // XE[] itemArray = new E[10]; // X인스턴스 여부 판단 불가제네릭으로 객체 생성 불가제네릭으로 배열 생성 불가 오버로딩..

Java 2024.12.25