- Amazon.co.jp ・本 (448ページ)
- / ISBN・EAN: 9784873117188
作品紹介・あらすじ
JVMのチューニングと正しいプログラミングの両面からアプローチ!
本書ではJVMのチューニングとJavaプラットフォームでの問題解決の双方からJavaパフォーマンスの「アート」と「サイエンス」を明らかにします。Javaアプリケーションのテスト手法やベンチマーク測定、パフォーマンス分析に必須のモニタリングツールを学んだうえで、さまざまな性能改善について議論します。JITコンパイル、ガベージコレクションというチューニングが大きな役割を果たす2つの仕組みについて最初に考察します。続いて、Javaプラットフォームのさまざまな側面で高いパフォーマンスを発揮するためのベストプラクティスを紹介します。具体的には、Javaのヒープメモリ、ネイティブメモリ、スレッド、Java EEのAPI、JPAとJDBC、そしてJava SEのAPIでのヒントを取り上げます。
感想・レビュー・書評
-
アムダールの法則の式が間違っている。原著のErrataには訂正が無いから翻訳版のみかも。
詳細をみるコメント0件をすべて表示 -
jvmやコンパイル、並列処理、Streamなどについて、仕組みの詳細に踏み込んで解説してくれるので、パフォーマンス観点以外でも勉強になりました。
-
ある程度の規模でJavaを使っている人用の本。私の場合は仕事で検索システムという非常にパフォーマンスが求められるソフトウェアを開発・運用しているので読んでみたが、実際必読の内容だらけでもっと早く読んでおけば良かったとなった。冒頭に「日曜日の夜に読んで翌日から手早くパフォーマンス改善ができるようなことはない」と書いてあったが、かなり実用的な内容も多く案外そうでもないかもとも思った。一方、JVMやOSの細かい処理にも触れており、false sharingみたいなユーザ側ではあまりどうしようもないような問題も解説していて実用的で実践的な内容とコアでニッチな内容が混濁している構成となっている(悪い意味ではなく)
実践的な内容としてはJavaパフォーマンスを計測するツールボックス(JFR, Mission Control, VisualVM, jcmd, jinfo, jstackなど)の機能と使い方、様々なJVMオプション、ヒープ分析・ヒープダンプの見方、Java SEのパフォーマンスTipsを中心にざっくりと解説している。体系的な内容としては、ベンチマークの種類・取り方と注意点、JITやGCの仕組みとチューニング方法などを詳細に説明している。コアな内容としてはthread-local allocation buffer, false sharing, エスケープ分析、CAS命令など。Java EEやJDBCのチューニングはやれることが限定的で現在必要としていないためざっくり流し読んだ。Java 7までの内容がメインでJava 8にもそこそこ触れている感じだが、基本的なJVMのチューニングはこれを読んでおけば困らなそう。
しかし全体を通して一貫していることは「JVM自体のチューニングを通してのパフォーマンス改善はごく一部分である」ということで大体のボトルネックはコード自体にあると述べている。アルゴリズムのオーダは当然、他にもThreadLocal変数やオブジェクトプールによるメモリリーク、不用意な同期には注意と述べている。
総じて期待以上の良書だった。ここ1年半仕事でJavaを使い、Effective Javaも読み、Javaにはかなり詳しくなったと思っていたが、この本を読むとまだまだだと実感させられた。しかし、CPUサイクルとメモリの消費を極限まで最適化してhigh-performanceなプログラムを書く場合、Javaみたいにメモリリソースが隠蔽されている言語では限界があるなあとは感じてしまった(その制約により安全性が保証されているし、その中で素晴らしいパフォーマンスを上げている言語だとは思うが) -
Javaアプリケーションを運用する場合のパフォーマンスに関わる項目を網羅的に解説した本。
JVMのオプションは600種を超えるが、その中でもパフォーマンスに関わる、特に頻出するチューニング項目について、
・なぜ有効なのか
・どういうときに有効なのか
・気をつけるべき点は何か
・どういう基準で値を設定すればよいか
を簡潔にまとめている。
本書でカバーされるものは以下の通り。
・計測ツール
・JITコンパイラ
・GC
・ヒープメモリの効果的な使い方
・ネイティブメモリ
・スレッドおよびスレッドプール
・JavaEE
・JDBCおよびJPA
・JavaSE APIのTips
JVMよりもアプリケーションコードによるパフォーマンス劣化の割合は大きい。
アプリケーションコード、JVM双方広く取り扱った良書である。
豊富なコラムや現代のマルチスレッドプログラミングで起き得る問題(false sharingなど)にも言及し、およそこの一冊を読んでおけば多くのケースで困ることはないだろうと思える。
素晴らしいのは、各扱う内容ごとに、どう計測すれば良いかがセットで述べられる点である。
パフォーマンスチューニングは、「推測するな、計測せよ」が有名なフレーズであるが、本書の最初にこれについて言及し各所で何を使ってどう見れば良いか述べられている。
なお、本書はJava8までを対象としており、2017/10/15現在最新のJava9により変わった部分も多少なり存在する(CMS GCが非推奨となりましたG1 GCがデフォルトとなったなど)。
しかし、パフォーマンスに注意すべき部分は変わっていないため、長く参考になる本であるように思う。 -
Java である程度以上の規模のシステムを開発・運用するなら必読.
-
読み終わったー\(^o^)/
社内の読書会で読んだ本。コーディングでの留意点やJVMのマニアックなパラメータが満載でした。