谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

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 なのですから、日本のSIerStrutsを使うことをどうして否定できましょうか。
いえ、今日はそんな話題ではありません。


紹介したいのは上のリンク先の本、「Optimizing Java - Practical Techniques for Improved Performance Tuning」です。名前の通り、Javaのパフォーマンスに関する書籍です。まだEarly Releaseの段階で、全体の1/3ほどしか書かれていませんが、現状の版を入手したので紹介したいと思います。


ここまでで、「あれ、なんか似たような本がなかったっけ」と思った方がいらっしゃるかも知れません。そう、オライリー社からは2015年に「Javaパフォーマンス」という書籍が出版されています。

Javaパフォーマンス - O’Reilly Japan

こちらの日本語版では、私も監訳者まえがきを書かせて頂き、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!