자바 최적화: 가장 빠른 성능을 구현하는 검증된 10가지 기법

Book description

"성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고급 자바 개발자에게 정량적이고 검증 가능한 접근 방식으로 자바 애플리케이션 성능을 튜닝하는 방법을 알려준다.

성능 튜닝은 원하는 결과를 정의하고 결정하는 과정이다. 자바 성능에 관한 대부분 자료는 자바 가상 머신 이론과 내부의 모습을 살펴보는 데 그치지만, 이 책은 레시피, 팁/트릭, 알고리즘 등 다양한 부문을 살펴보며 성능 튜닝의 실용적 측면을 이야기한다."

Table of contents

  1. 자바 최적화
    1. 지은이 소개
    2. 옮긴이 소개
    3. 옮긴이의 말
    4. 감사의 말
    5. 들어가며
    6. CONTENTS (1/3)
    7. CONTENTS (2/3)
    8. CONTENTS (3/3)
  2. CHAPTER 1 성능과 최적화
    1. 1.1 자바 성능: 잘못된 방법
    2. 1.2 자바 성능 개요
    3. 1.3 성능은 실험과학이다
    4. 1.4 성능 분류
      1. 1.4.1 처리율
      2. 1.4.2 지연
      3. 1.4.3 용량
      4. 1.4.4 사용률
      5. 1.4.5 효율
      6. 1.4.6 확장성
      7. 1.4.7 저하
      8. 1.4.8 측정값 사이의 연관 관계
    5. 1.5 성능 그래프 읽기
    6. 1.6 마치며
  3. CHAPTER 2 JVM 이야기
    1. 2.1 인터프리팅과 클래스로딩
    2. 2.2 바이트코드 실행
    3. 2.3 핫스팟 입문
      1. 2.3.1 JIT 컴파일이란?
    4. 2.4 JVM 메모리 관리
    5. 2.5 스레딩과 자바 메모리 모델(JMM)
    6. 2.6 JVM 구현체 종류
      1. 2.6.1 JVM 라이선스
    7. 2.7 JVM 모니터링과 툴링
      1. 2.7.1 VisualVM
    8. 2.8 마치며
  4. CHAPTER 3 하드웨어와 운영체제
    1. 3.1 최신 하드웨어 소개
    2. 3.2 메모리
      1. 3.2.1 메모리 캐시 (1/2)
      2. 3.2.1 메모리 캐시 (2/2)
    3. 3.3 최신 프로세서의 특성
      1. 3.3.1 변환 색인 버퍼(TLB)
      2. 3.3.2 분기 예측과 추측 실행
      3. 3.3.3 하드웨어 메모리 모델
    4. 3.4 운영체제
      1. 3.4.1 스케줄러
      2. 3.4.2 시간 문제
      3. 3.4.3 컨텍스트 교환
    5. 3.5 단순 시스템 모델
    6. 3.6 기본 감지 전략
      1. 3.6.1 CPU 사용률
      2. 3.6.2 가비지 수집
      3. 3.6.3 입출력
      4. 3.6.4 기계 공감
    7. 3.7 가상화
    8. 3.8 JVM과 운영체제
    9. 3.9 마치며
  5. CHAPTER 4 성능 테스트 패턴 및 안티 패턴
    1. 4.1 성능 테스트 유형
      1. 4.1.1 지연 테스트
      2. 4.1.2 처리율 테스트
      3. 4.1.3 부하 테스트
      4. 4.1.4 스트레스 테스트
      5. 4.1.5 내구 테스트
      6. 4.1.6 용량 계획 테스트
      7. 4.1.7 저하 테스트
    2. 4.2 기본 베스트 프랙티스
      1. 4.2.1 하향식 성능
      2. 4.2.2 테스트 환경 구축
      3. 4.2.3 성능 요건 식별
      4. 4.2.4 자바에 특정한 이슈
      5. 4.2.5 SDLC 일부로 성능 테스트 수행하기
    3. 4.3 성능 안티패턴 개요
      1. 4.3.1 지루함
      2. 4.3.2 이력서 부풀리기
      3. 4.3.3 또래 압박
      4. 4.3.4 이해 부족
      5. 4.3.5 오해와 있지도 않은 문제
    4. 4.4 성능 안티패턴 카탈로그
      1. 4.4.1 화려함에 사로잡히다
      2. 4.4.2 단순함에 사로잡히다
      3. 4.4.3 성능 튜닝 도사
      4. 4.4.4 민간 튜닝
      5. 4.4.5 안되면 조상 탓
      6. 4.4.6 숲을 못 보고 나무만 보다
      7. 4.4.7 내 데스크톱이 UAT
      8. 4.4.8 운영 데이터처럼 만들기는 어려워
    5. 4.5 인지 편향과 성능 테스트
      1. 4.5.1 환원주의
      2. 4.5.2 확증 편향
      3. 4.5.3 전운의 그림자(행동 편향)
      4. 4.5.4 위험 편향
      5. 4.5.5 엘스버그 역설
    6. 4.6 마치며
  6. CHAPTER 5 마이크로벤치마킹과 통계
    1. 5.1 자바 성능 측정 기초
    2. 5.2 JMH 소개
      1. 5.2.1 될 수 있으면 마이크로벤치마크하지 말지어다(실화)
      2. 5.2.2 휴리스틱: 마이크로벤치마킹은 언제 하나?
      3. 5.2.3 JMH 프레임워크
      4. 5.2.4 벤치마크 실행 (1/2)
      5. 5.2.4 벤치마크 실행 (2/2)
    3. 5.3 JVM 성능 통계
      1. 5.3.1 오차 유형
      2. 5.3.2 비정규 통계학
    4. 5.4 통계치 해석
    5. 5.5 마치며
  7. CHAPTER 6 가비지 수집 기초
    1. 6.1 마크 앤 스위프
      1. 6.1.1 가비지 수집 용어
    2. 6.2 핫스팟 런타임 개요
      1. 6.2.1 객체를 런타임에 표현하는 방법
      2. 6.2.2 GC 루트 및 아레나
    3. 6.3 할당과 수명
      1. 6.3.1 약한 세대별 가설
    4. 6.4 핫스팟의 가비지 수집
      1. 6.4.1 스레드 로컬 할당
      2. 6.4.2 반구형 수집
    5. 6.5 병렬 수집기
      1. 6.5.1 영 세대 병렬 수집
      2. 6.5.2 올드 세대 병렬 수집
      3. 6.5.3 병렬 수집기의 한계
    6. 6.6 할당의 역할 (1/2)
    7. 6.6 할당의 역할 (2/2)
    8. 6.7 마치며
  8. CHAPTER 7 가비지 수집 고급
    1. 7.1 트레이드오프와 탈착형 수집기
    2. 7.2 동시 GC 이론
      1. 7.2.1 JVM 세이프포인트
      2. 7.2.2 삼색 마킹
    3. 7.3 CMS
      1. 7.3.1 CMS 작동 원리
      2. 7.3.2 CMS 기본 JVM 플래그
    4. 7.4 G1
      1. 7.4.1 G1 힙 레이아웃 및 영역
      2. 7.4.2 G1 알고리즘 설계
      3. 7.4.3 G1 단계
      4. 7.4.4 G1 기본 JVM 플래그
    5. 7.5 셰난도아
      1. 7.5.1 동시 압착
      2. 7.5.2 셰난도아 얻기
    6. 7.6 C4(아줄 징)
      1. 7.6.1 로드값 배리어
    7. 7.7 밸런스드(IBM J9)
      1. 7.7.1 J9 객체 헤더
      2. 7.7.2 밸런스드에서 큰 배열 처리하기
      3. 7.7.3 NUMA와 밸런스드
    8. 7.8 레거시 핫스팟 수집기
      1. 7.8.1 Serial 및 Serial Old
      2. 7.8.2 증분 CMS(iCMS)
      3. 7.8.3 디프리케이트되어 사라진 GC 조합
      4. 7.8.4 엡실론
    9. 7.9 마치며
  9. CHAPTER 8 GC 로깅, 모니터링, 튜닝, 툴
    1. 8.1 GC 로깅 개요
      1. 8.1.1 GC 로깅 켜기
      2. 8.1.2 GC 로그 vs JMX
      3. 8.1.3 JMX의 단점
      4. 8.1.4 GC 로그 데이터의 장점
    2. 8.2 로그 파싱 툴
      1. 8.2.1 센섬
      2. 8.2.2 GCViewer
      3. 8.2.3 같은 데이터를 여러 가지 형태로 시각화하기
    3. 8.3 GC 기본 튜닝
      1. 8.3.1 할당이란?
      2. 8.3.2 중단 시간이란?
      3. 8.3.3 수집기 스레드와 GC 루트
    4. 8.4 Parallel GC 튜닝
    5. 8.5 CMS 튜닝
      1. 8.5.1 단편화로 인한 CMF
    6. 8.6 G1 튜닝
    7. 8.7 jHiccup
    8. 8.8 마치며
  10. CHAPTER 9 JVM의 코드 실행
    1. 9.1 바이트코드 해석
      1. 9.1.1 JVM 바이트코드 개요 (1/2)
      2. 9.1.1 JVM 바이트코드 개요 (2/2)
      3. 9.1.2 단순 인터프리터
      4. 9.1.3 핫스팟에 특정한 내용
    2. 9.2 AOT와 JIT 컴파일
      1. 9.2.1 AOT 컴파일
      2. 9.2.2 JIT 컴파일
      3. 9.2.3 AOT 컴파일 vs JIT 컴파일
    3. 9.3 핫스팟 JIT 기초
      1. 9.3.1 klass 워드, vtable, 포인터 스위즐링
      2. 9.3.2 JIT 컴파일 로깅
      3. 9.3.3 핫스팟 내부의 컴파일러
      4. 9.3.4 핫스팟의 단계별 컴파일
    4. 9.4 코드 캐시
      1. 9.4.1 단편화
    5. 9.5 간단한 JIT 튜닝법
    6. 9.6 마치며
  11. CHAPTER 10 JIT 컴파일의 세계로
    1. 10.1 JITWatch란?
      1. 10.1.1 기본적인 JITWatch 뷰
      2. 10.1.2 디버그 JVM과 hsdis
    2. 10.2 JIT 컴파일 개요
    3. 10.3 인라이닝
      1. 10.3.1 인라이닝 제한
      2. 10.3.2 인라이닝 서브시스템 튜닝
    4. 10.4 루프 펼치기
      1. 10.4.1 루프 펼치기 정리
    5. 10.5 탈출 분석
      1. 10.5.1 힙 할당 제거
      2. 10.5.2 락과 탈출 분석
      3. 10.5.3 탈출 분석의 한계
    6. 10.6 단형성 디스패치
    7. 10.7 인트린직
    8. 10.8 온-스택 치환
    9. 10.9 세이프포인트 복습
    10. 10.10 코어 라이브러리 메서드
      1. 10.10.1 인라이닝하기 적합한 메서드 크기 상한
      2. 10.10.2 컴파일하기 적합한 메서드 크기 상한
    11. 10.11 마치며
  12. CHAPTER 11 자바 언어의 성능 향상 기법
    1. 11.1 컬렉션 최적화
    2. 11.2 List 최적화
      1. 11.2.1 ArrayList
      2. 11.2.2 LinkedList
      3. 11.2.3 ArrayList vs LinkedList
    3. 11.3 Map 최적화
      1. 11.3.1 HashMap
      2. 11.3.2 TreeMap
      3. 11.3.3 MultiMap은 없어요
    4. 11.4 Set 최적화
    5. 11.5 도메인 객체
    6. 11.6 종료화 안 하기
      1. 11.6.1 무용담: 정리하는 걸 깜빡하다
      2. 11.6.2 왜 종료화로 문제를 해결하지 않을까?
      3. 11.6.3 try-with-resources
    7. 11.7 메서드 핸들
    8. 11.8 마치며
  13. CHAPTER 12 동시 성능 기법
    1. 12.1 병렬성이란?
      1. 12.1.1 자바 동시성 기초
    2. 12.2 JMM의 이해 (1/2)
    3. 12.2 JMM의 이해 (2/2)
    4. 12.3 동시성 라이브러리 구축
      1. 12.3.1 Unsafe
      2. 12.3.2 아토믹스와 CAS
      3. 12.3.3 락과 스핀락
    5. 12.4 동시 라이브러리 정리
      1. 12.4.1 java.util.concurrent 락
      2. 12.4.2 읽기/쓰기 락
      3. 12.4.3 세마포어
      4. 12.4.4 동시 컬렉션
      5. 12.4.5 래치와 배리어
    6. 12.5 실행자와 태스크 추상화
      1. 12.5.1 비동기 실행이란?
      2. 12.5.2 ExecutorService 선택하기
      3. 12.5.3 포크/조인
    7. 12.6 최신 자바 동시성
      1. 12.6.1 스트림과 병렬 스트림
      2. 12.6.2 락-프리 기법
      3. 12.6.3 액터 기반 기법
    8. 12.7 마치며
  14. CHAPTER 13 프로파일링
    1. 13.1 프로파일링 개요
    2. 13.2 샘플링과 세이프포인팅 편향
    3. 13.3 개발자용 프로파일링 툴
      1. 13.3.1 VisualVM 프로파일러
      2. 13.3.2 JProfiler (1/2)
      3. 13.3.2 JProfiler (2/2)
      4. 13.3.3 YourKit
      5. 13.3.4 JFR/JMC
      6. 13.3.5 운영 툴
    4. 13.4 최신 프로파일러
    5. 13.5 할당 프로파일링 (1/2)
    6. 13.5 할당 프로파일링 (2/2)
    7. 13.6 힙 덤프 분석
      1. 13.6.1 hprof
    8. 13.7 마치며
  15. CHAPTER 14 고성능 로깅 및 메시징
    1. 14.1 로깅
      1. 14.1.1 로깅 벤치마크
    2. 14.2 성능에 영향이 적은 로거 설계하기
    3. 14.3 리얼 로직 라이브러리를 이용해 지연 줄이기
      1. 14.3.1 아그로나 (1/2)
      2. 14.3.1 아그로나 (2/2)
      3. 14.3.2 단순 바이너리 인코딩
      4. 14.3.3 에어론
      5. 14.3.4 에어론의 설계 개념 (1/2)
      6. 14.3.4 에어론의 설계 개념 (2/2)
    4. 14.4 마치며
  16. CHAPTER 15 자바 9와 미래
    1. 15.1 자바 9에서 소소하게 개선된 성능
      1. 15.1.1 코드 캐시 세그먼트화
      2. 15.1.2 콤팩트 스트링
      3. 15.1.3 새로운 스트링 연결
      4. 15.1.4 C2 컴파일러 개선
      5. 15.1.5 G1 새 버전
    2. 15.2 자바 10과 그 이후 버전
      1. 15.2.1 새로운 릴리즈 절차
      2. 15.2.2 자바 10
    3. 15.3 자바 9 Unsafe 그 너머
      1. 15.3.1 자바 9의 VarHandle
    4. 15.4 발할라 프로젝트와 값 타입
    5. 15.5 그랄과 트러플
    6. 15.6 바이트코드의 향후 발전 방향
    7. 15.7 동시성의 향후 발전 방향
    8. 15.8 마치며 (1/3)
    9. 15.8 마치며 (2/3)
    10. 15.8 마치며 (3/3)

Product information

  • Title: 자바 최적화: 가장 빠른 성능을 구현하는 검증된 10가지 기법
  • Author(s): 이일웅, 벤저민 J. 에번스, 제임스 고프, 크리스 뉴랜드
  • Release date: May 2019
  • Publisher(s): Hanbit Media, Inc.
  • ISBN: 9791162241776