Optimizing JavaというJavaパフォーマンス系の書籍が面白そう
急激な冷え込みのせいで「寒い!」というつぶやきがTLに散見されるこの頃ですが、皆さんお風邪など召していらっしゃらないでしょうか。
否応なしに寒いという言葉に反応してしまう、けなげなエンジニアの [twitter:@cero_t] です。
このエントリーは Java Advent Calendar 2016 の8日目です。
昨日は [twitter:@haruo31] さんの「Java Stream APIでハマったこと」で、
明日は [twitter:@deaf_tadashi] さんの「マイクロベンチマークツール、JMHについて」でした。
今日のエントリーでは、Javaのパフォーマンス系書籍を紹介したいと思います。
Optimizing Java - O’Reilly Media
URLを見るにつけ、あのオライリー様のサイトですら拡張子が由緒正しい .do なのですから、日本のSIerがStrutsを使うことをどうして否定できましょうか。
いえ、今日はそんな話題ではありません。
紹介したいのは上のリンク先の本、「Optimizing Java - Practical Techniques for Improved Performance Tuning」です。名前の通り、Javaのパフォーマンスに関する書籍です。まだEarly Releaseの段階で、全体の1/3ほどしか書かれていませんが、現状の版を入手したので紹介したいと思います。
ここまでで、「あれ、なんか似たような本がなかったっけ」と思った方がいらっしゃるかも知れません。そう、オライリー社からは2015年に「Javaパフォーマンス」という書籍が出版されています。
こちらの日本語版では、私も監訳者まえがきを書かせて頂き、Java Day Tokyoで寺田佳央さんと共にサイン会を行いました。
当時はきっと「この寺田さんの横にいて本に落書きしてる人、誰なんだろう」と思われていたかも知れませんが、私を誰だと思ってるんでしょう、せろさんだぞ?
この2冊について、比較しながら紹介しましょう。
目次
「Javaパフォーマンス」の目次は、次の通りです。
1章 | イントロダクション |
2章 | パフォーマンステストのアプローチ |
3章 | Javaパフォーマンスのツールボックス |
4章 | JITコンパイラのしくみ |
5章 | ガベージコレクションの基礎 |
6章 | ガベージコレクションのアルゴリズム |
7章 | ヒープのベストプラクティス |
8章 | ネイティブメモリのベストプラクティス |
9章 | スレッドと同期のパフォーマンス |
10章 | Java EEのパフォーマンス |
11章 | データベースのベストプラクティス |
12章 | Java SEのAPIのパフォーマンス |
JavaのメモリやGC、スレッドに関する紹介から、SE / EEやデータベースのパフォーマンスに広げた話をしています。
一方、「Optimizing Java」の目次は次の通りです。
Chapter 1 | Optimization and Performance Defined |
Chapter 2 | Overview of the JVM |
Chapter 3 | Hardware and Operating Systems |
Chapter 4 | Performance Testing |
Chapter 5 | Measurement and Bottom-Up Performance |
Chapter 6 | Monitoring and Analysis |
Chapter 7 | Hotspot GC Deep Dive |
Chapter 8 | Garbage Collection Monitoring and Tuning |
Chapter 9 | Hotspot JIT Compilation |
Chapter 10 | Java Language Performance Techniques |
Chapter 11 | Profiling |
Chapter 12 | Concurrent Performance Techniques |
Chapter 13 | The Future |
うん、ほとんど一緒やん?
「Optimizing Java」には、「Javaパフォーマンス」では触れられていたSEやEEの話などはないため、そこが差分になりそうにも見えます。ただ正直、「Javaパフォーマンス」の10章以降はちょっと薄口な感じでしたので、そこを飛ばせばほとんど同じ内容を網羅していると言えます。
では、何が違うんでしょうか。
Javaパフォーマンス vs Optimizing Java
僕が見た限りでは「Javaパフォーマンス」は教科書に近い内容、「Optimizing Java」はやや読み物寄りの内容になっています。
「Optimizing Java」は、現在執筆されているChapter 5までしか読めていませんが、「Javaパフォーマンス」には書かれていなかったOSやJVM周りのレイヤーの話や、テスト戦略の話など、少し目線が違った内容を書いていました。
たとえば、Javaのクラスファイルが「0xCAFEBABE」から始まっていることは、Javaに詳しい方なら既にご存じかと思います。ただ、その先はどうなっているのか。
書籍では次のように紹介されています。
- Magic Number (0xCAFEBABE)
- Version of Class File Format
- Constant Pool
- Access Flags
- This Class Name
- Super Class Name
- Interfaces
- Fields
- Methods
- Attributes
この先頭を取って
M V C A T S I F M A、
語呂合わせして
My Very Cute Animal Turn Savage In Full Moon Areas
なんて紹介されています。
「僕のとってもかわいい猫は、満月のエリアで凶暴になる」
・・・覚えやすいんですかね、これ?
あ、なんかふざけた本だなと思ったかも知れませんが、もちろん技術的な面もきちんと紹介されています。
あくまで上に書いたようなウィット(?)も挟みながら、Javaの領域だけでなく、必要に応じて低レイヤーにも触れて紹介する本となっているわけです。そのため、「Javaパフォーマンス」を読んだ方でも楽しめる本になるのではないかと思います。
で、いつ出るの? 日本語版は?
この本は2017年3月に出版予定となっています。
また、皆さん気になる日本語版ですが、残念ながらまだ翻訳されることは決まっていないようです。
ただ原著の人気が高かったり、この後に公開される6章以降の内容が「Javaパフォーマンス」とはまた違った切り口であり楽しめるのであれば、翻訳される可能性も十分にあるんじゃないかなと思っています。
そんなわけで、日本語版が出ることを祈りながら、このエントリーを書きました。
Stay tuned, see you!