요즘은 오라클 performance engineer가 2014년에 펴낸 Java performance the definitive guide 란 책을 한번 더 보고 있습니다. 이 책의 난이도를 말하자면 자바에 대한 이해가 거의 최상 마스터급(?)이어야만 완전히 이해할 수 있다고 생각되는데요. 저는 아직 그 수준이 아닌지라 3번째 보고있지만 아직도 머리에 팍팍 이해가 안가는 내용이 있네요.
여러 자바 관련 cpu, gc, memory, network 상태를 측정하는 툴 소개하고, JIT 컴파일러 튜닝, Oracle Hotspot JVM에 사용되는 4가지 GC Algorithm에 대한 설명과 튜닝 방법, Memory model에 대한 내용과 튜닝 방법, 실제 코드를 보여주면서 이렇게, 저렇게 하면 실제적으로 어떤 효과가 나타나는지 수치로 보여주고 있어 성능 튜닝 엔지니어가 될려면 바이블로 생각하셔도 될만큼의 깊이있는 책입니다.
이번 주말에 최대한 다보고 차후에 또 4번째 정독을 시도 해야겠네요. 이 책 보고나서는 Algorithm책의 정석이라는 MIT에서 나온 Introduction to algorithms 책을 볼 예정입니다.
소프트웨어 엔지니어로서 cpu, memory를 효율적으로 사용하기 위한 백그라운드 지식이 무엇이 필요할지 고민하다가 대학교 수업 때 공부한 자료구조와 알고리즘을 여러번 보고 연구를 해야겠다는 생각들어 읽을 예정입니다. 자료구조나 알고리즘에서 자주 따지는게 어떤 알고리즘의 시간 복잡도가 어떻게 되냐 이런 애기인데, 결국에는 cpu cycle 사용을 얼마나 최소화하냐 이런 애기지요. 공간 복잡도는 자주 거론되지 않는데 메모리 사용을 효율적으로 하려면 공간 복잡도에 대한 이해도 마스터급이 되어야 하기 때문에 다시 살펴보고 지식을 재정비할 필요가 있습니다. 본래 모바일 개발자로 일을 하다보니 공간 복잡도를 무시할 수가 없는 상태입니다;; 그런데 책이 1000페이지 이상이다보니 1년에 한번 정독 가능할 것 같네요.
서비스나 제품 만들려면 아파치/Nginx 웹 서버 관련된 지식이 필요한데 서버 부분도 빨리 습득해야 되서 알고리즘 책을 1년 동안 주구장창 보고 또 보기란 쉽지 않네요. 아무튼 이래저래 전문연구요원할 때 빡세게 공부하면서 했어야 했는데 뒤늦게 뭘 하려다 보니 공부할 거리가 산더미만큼 쌓인지라 블로그에 글 쓰는게 점점 늦춰지고 있습니다. 개인적으로 재미로 Dependency Injector를 빨리 개발하고 싶은데, 공부 더미에 치이는 주말입니다.