監訳者まえがき
Javaのパフォーマンスチューニング、という言葉を聞くと、皆さんはどのようなイメージを持つでしょうか。
「Java SEやJava EEのAPIを熟知している必要がある」とか「JVMのオプションを把握しなくてはいけない」など、「上級者向け」というイメージを持っている方がいるかもしれません。もちろん多岐にわたるJavaの知識が必要なのは確かですが、だからといって上級者以外お断りかといえば決してそんなことはありません。Javaのパフォーマンスに関する知識を身につけることは、CPUやメモリを効率よく利用するプログラムを書けるようになるため、つまり「良いソースコード」を書くために、すべてのJavaエンジニアにとって必要不可欠な要素となります。
また、「そもそもシステムのパフォーマンスボトルネックは、ほとんどがJavaではなく、データベースアクセスだ」と考える方がいるかもしれません。それも、多くの場面で正解です。システム開発の現場では、Java自身のパフォーマンスよりも、ネットワークI/OやデータベースのI/Oによる待ち時間が問題となることのほうが多いでしょう。
ただ、私が仕事としてJavaシステムのトラブルシューティングを行う中で、決してそれだけとは言えないプログラムの問題をたくさん見てきました。大量のデータに対して単純な線形検索を行っているせいで、処理に時間がかかる。不要なオブジェクトをたくさん生成するせいでGC(ガベージコレクション)が頻発し、システムの反応が悪くなる。また、問題が起きても解析ツールについての知識がないから、どこに原因があるかを絞り込めない。それらが積み重なって、システムが応答しなくなる、システムダウンする……このような問題は、乱暴に言ってしまえば、開発者がJavaのふるまいを十分に理解していないからこそ発生する問題です。 ...