谷本 心 in せろ部屋 このページをアンテナに追加 RSSフィード

2016-12-08

Optimizing JavaというJavaパフォーマンス系の書籍が面白そう

急激な冷え込みのせいで「寒い!」というつぶやきがTLに散見されるこの頃ですが、皆さんお風邪など召していらっしゃらないでしょうか。

否応なしに寒いという言葉に反応してしまう、けなげなエンジニアの @ です。


このエントリーは Java Advent Calendar 2016 の8日目です。

昨日は @ さんの「Java Stream APIでハマったこと」で、

明日は @ さんの「マイクロベンチマークツール、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 SEAPIのパフォーマンス

JavaのメモリやGCスレッドに関する紹介から、SE / EEやデータベースのパフォーマンスに広げた話をしています。


一方、「Optimizing Java」の目次は次の通りです。

Chapter 1Optimization and Performance Defined
Chapter 2Overview of the JVM
Chapter 3Hardware and Operating Systems
Chapter 4Performance Testing
Chapter 5Measurement and Bottom-Up Performance
Chapter 6Monitoring and Analysis
Chapter 7Hotspot GC Deep Dive
Chapter 8Garbage Collection Monitoring and Tuning
Chapter 9Hotspot JIT Compilation
Chapter 10Java Language Performance Techniques
Chapter 11Profiling
Chapter 12Concurrent Performance Techniques
Chapter 13The Future

うん、ほとんど一緒やん?


「Optimizing Java」には、「Javaパフォーマンス」では触れられていたSEやEEの話などはないため、そこが差分になりそうにも見えます。ただ正直、「Javaパフォーマンス」の10章以降はちょっと薄口な感じでしたので、そこを飛ばせばほとんど同じ内容を網羅していると言えます。


では、何が違うんでしょうか。


Javaパフォーマンス vs Optimizing Java

僕が見た限りでは「Javaパフォーマンス」は教科書に近い内容、「Optimizing Java」はやや読み物寄りの内容になっています。

「Optimizing Java」は、現在執筆されているChapter 5までしか読めていませんが、「Javaパフォーマンス」には書かれていなかったOSJVM周りのレイヤーの話や、テスト戦略の話など、少し目線が違った内容を書いていました。


たとえば、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!

2013-08-22

[]参加予定&行きたかったセッション一覧

JavaOne2013で参加予定のセッション一覧をメモ。

参加できないけど、行きたいセッションも一緒に記載。

スピーカーセッション

BOF7862 -- What and How Java Troubleshooters Think: Eight Years of Troubleshooting Java

予約済みのセッション

UGF10501 -- Garbage Collection: The Useful Parts, Part 1

UGF10520 -- Java 8: The Good Parts

KEY11050 -- Java Strategy and Technical Keynotes

CON7859 -- The Road to Lambda

CON3675 -- Garbage Collection: The Useful Parts (Practical), Part 2

CON5113 -- Production-Time Profiling Out of the Box

CON3762 -- Performance Tuning Where Java Meets the Hardware

CON8165 -- Type Inference in Java SE 8

BOF3663 -- Debugging Native Heap OOM: Tools and Techniques

BOF5376 -- HotSpot Serviceability

BOF7937 -- Collections Gathering

BOF4159 -- The Most Useful Tools for Debugging on Windows

BOF4471 -- JVM Performance

CON5092 -- Diagnosing Your Application on the JVM

TUT5181 -- Oracle Java Mission Control: Java Flight Recorder Deep Dive

TUT4601 -- Analyzing JavaFX Apps with Java Flight Recorder and Oracle Java Mission Control

CON9234 -- A JDBC Datasource for Failing Over and Replaying In-Flight Transactions

BOF5225 -- Teaching the Java Platform with Nashorn

BOF5517 -- Build and Debug Your JavaFX Application for the iPad

BOF3999 -- Eclipse Orion: Your IDE in the Clouds

BOF4099 -- High-Performance Java Applications Without Dynamic Code: Ahead-of-Time Code Generators for iOS

BOF5267 -- Money and Currency in Java: Best Practices, Libraries, and JSR 354

BOF3884 -- Adopt-a-JSR Workshop

CON4479 -- Visualizing and Understanding Garbage-First with Java Mission Control

CON2055 -- Programming with Lambda Expressions in Java

CON7942 -- Java 8 Streams: Lambda in Top Gear

CON5091 -- Java Flight Recorder Behind the Scenes

CON4191 -- The Adventurous Developer’s Guide to JVM Languages

CON2959 -- Modular JavaScript

CON3699 -- Type-Safe Web with Kotlin

KEY11027 -- Java Community Keynote

CON4540 -- Advanced JVM Tuning

CON2933 -- Object-Oriented Design Patterns Revisited with Java 8 Lambdas

CON5876 -- How to Write Memory-Efficient Java Code

CON4695 -- Java Memory Hogs

被ってしまって参加できないセッション(参加したい度:高)

Java 8 Collections and Concurrency [CON7962]

JavaFX on Android: First Insight [BOF7791]

Collections Performance Fundamentals [CON7961]

被ってしまって参加できないセッション(参加したい度:中)

Enhanced Metadata in Java SE 8 [CON1861]

The Spring Update [CON2439]

Polyglot JVM: Who, Why, When, and How [CON7775]

Putting Kotlin to the Test [CON3240]

Practices and Tools for Building Better APIs [CON4374]

被ってしまって参加できないセッション(参加したい度:低)

Garbage Collection Unleashed: Demystifying the Wizardry [CON3948]

Fifty New Features of Java EE 7 in 50 Minutes [CON4510]

JSR 341: Expression Language 3.0 [CON3733]

Nashorn: JavaScript on the JVM [CON7835]

Nashorn: Java and JavaScript―Shaken, Not Stirred [BOF5793]

要するに

トラシュー&パフォチュー系のセッションを最優先で入れて、

Lambdaのセッションを次に入れたら、他が入らなくなったって事ですw