자바 코드 레벨의 최적화와 JVM, GC 튜닝 정도의 설명이 있으려나 했는데, 하드웨어 레벨의 이야기와 바이트 코드와 핫스팟에 대한 세부적인 이야기들로 매우 재밌게 읽었다. 개발하면서 코드 구현의 중요도는 가능하면 가독성과 테스트 용이성이 좋은 코드로 구현하는 것에 두고 있다. 최적화에 대한 고려는 적합한 자료구조를 선정하는 것, 불필요한 블로킹을 하지 않는 것 외에는 코드 구현 레벨에서 딱히 최적화에 신경 쓴 적은 없었던 것 같다. 심지어 명시적인 함수를 명시적으로 인라인으로 선언해 본 지도 좀 되었다. 대부분의 병목은 코드 구현 레벨보다 외부 연동에서 발생한다.
꽤 오래전에 사서 필요한 부분만 보고는 잊고 있다가 올해 다 봤다. 오래전에 리디북스에서 구매했었기에 PDF 형식의 eBook에서 텍스트 복사를 할 수가 없으니 간단히 정리한다.
이제 자바 언어와 JVM(자바 가상 머신)은 어느 정도 독립적이라서 JVM 앞에 붙인 J자는 오해의 소지가 있습니다. JVM 규격에 따라 클래스 파일로 컴파일되는 JVM 언어는 모두 다 실행되니까요. Scala 컴파일러 scalac로 컴파일한 바이트코드도 JVM에서 문제없이 작동합니다.
- 자바 최적화 중에서
원서가 2018년도에 번역서가 2019년도에 출간되었기에 "자바 10과 그 이후 버전"을 책 후반부에 하나의 챕터로 할애하고 있고, 최신 내용을 담고 있지는 않지만, 그럼에도 충분히 좋은 책이다. 책의 제목은 "자바 최적화"라고 하지만, JVM 위에서 돌아가는 언어를 사용한다면 이 책의 내용이 많은 도움이 될 것이다. 아래는 이 책에서 다루는 내용을 크게 4개의 항목으로 분류해 보았다. 자바 언어에 국한된 내용은 4번 항목 정도밖에 없다. 그마저도 다른 언어에도 대부분 적용할 수 있는 내용이다. 나머지 내용은 JVM에 대한 내용이라고 봐도 무방하다고 생각한다.
- 성능: 성능에 대한 정의와 측정, 성능 테스트 패턴과 안티 패턴에 대한 이야기.
- JVM, GC : 바이트 코드에 대한 내용과 HotSpot과 JIT 컴파일러에 대한 세부 사항 그리고, GC의 세부 사항과 GC 튜닝을 위한 로깅, 모니터링에 대한 상세한 내용.
- OS, HW : JVM이 OS에서 독립적인 환경을 제공하기 위해 OS와 하드웨어의 의존성을 어떻게 관리하고 있는지에 대한 이야기.
- 자바 : 자바의 기본 컬렉션의 성능 이야기, 자바의 동시성 라이브러리에 대한 상세한 내용. (메서드 핸들에 대한 내용이 '자바 언어의 성능 향상 기법' 챕터에 있지만, JVM의 구현 상세에 가깝다.)
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=193708331
그리고, GC 챕터를 볼 때 같이 보면 좋을 블로그를 소개한다.
https://www.blog-dreamus.com/post/zgc에-대해서
'Dev' 카테고리의 다른 글
Sharing Containers Across Multiple Docker Compose (0) | 2023.05.29 |
---|---|
JetBrains의 IDE에서 북마크 정보 마이그레이션 (0) | 2023.05.22 |
쏙쏙 들어오는 함수형 코딩 (0) | 2023.05.06 |
좋은 코드, 나쁜 코드 (Good Code, Bad Code) (0) | 2023.03.04 |
도메인 주도 설계 (0) | 2023.02.05 |