書籍「Javaパフォーマンス」を読んで
監訳者の@cero-tさんから頂きました。@cero-tさん、ありがとうございます。
- 作者: Scott Oaks,アクロクエストテクノロジー株式会社(監訳),寺田佳央(監訳),牧野聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/04/11
- メディア: 大型本
- この商品を含むブログ (3件) を見る
しかし、実際に色々な案件の解析を繰り返すと、性能遅延の要因は多種多様です。過去に遭遇した代表的なものには、GC以外にも以下のような遅延要因があります。
- アプリケーションの不効率なロジック (ループ過多、オブジェクト生成過多)
- 過度なロック、同期漏れ/volatile漏れから無限ループ発生によるCPU消費
- ローカルJVM内でリモートEJBを呼び出すことによるシリアライズ遅延
- JDBC executeBatch()未使用でのバルク更新
- JPAのフェッチ設定誤り(N+1問題)による大量SQL発行
- 初期化コストの高いFactoryの多重初期化 (EntityManagerFactory, パーサのFactory)
本書 Javaパフォーマンス のスコープは非常に広く、上記のようなJVM 〜 Java SE API 〜 Java EEの広い範囲の性能課題について触れています。本書のような内容が日本語では今までなかったため、トラブル時にはJava SeriesのJava Performanceで苦戦しながら調べていましたが、本書も机の上に置いておこうと思います。
以下、個人的に嬉しかった部分をまとめます。
JITに関する言及が嬉しい
JITがどのようなコードをコンパイル対象としていて、どのようなタイミングでコンパイルされるのか、各種閾値やOn Stack Replacement、エスケープ分析について書籍で見かけたことがなかったため、仕組みを理解する上で役立ちました。
トラブルが起こると『どういう仕組みで問題が起こったのか』の説明が必要となるケースがよくあります。コードキャッシュの溢れが起こった場合に『そもそもJITって?』の説明を求められた場合に参考にしようと思います。
具体的なGCログが嬉しい
CMS-GCのpromotion failedやconcurrent mode failure、G1GCのto-space overflowやFullGCの発生など、何らかのチューニングを行った方が良い状況を示すGCログが具体的に示されているため、トラブル時にすぐに使える内容になっています。