nekoTheShadow’s diary

技術ブログとして始めたはずが、読書&愚痴ブログになりました(´・ω・`)

Scott Oaks『Javaパフォーマンス』(オライリージャパン)

Javaパフォーマンス

Javaパフォーマンス

ここ数か月、Java製のシステムのパフォーマンス問題に悩まされることが多く、手に取ったという悲しいいきさつがあります(´・ω・`) しかも11月の初めに買っていたにもかかわらず、前述の問題のせいで読む時間がとれず、ようやくきちんと読み始めたのが年末年始の冬休みでした(´・ω・`)

本書はJavaのパフォーマンス監視やチューニングのいろはを教えてくれる1冊です。本書を手に取った時点でJavaのパフォーマンス測定ツールが純正(?)やサードパーティ製問わず、様々あることは知っており、そういうツールのチュートリアル集・リファレンス集かと思って読み始めたのですが、結果から言うとそんなお手軽な本ではありませんでした。もちろん「道具」の使い方は丁寧に解説されていますが、その「道具」には必ず使いどころが存在します。のみでも丸太を切ることはできるかもしれませんが、そういう場合はのこぎりを使いたいものです。本書はツールの使い方だけではなく、どういう場合に使うべきかという根本的な部分から丁寧に解説している点で、価値の高い1冊だと思います。

またパフォーマンス測定やチューニングが話題になるのは、何かしらの問題が顕在してからが多いと思います。もちろん「問題」への対策を知っておくことも大事ですが、「問題」の原因やそれが起きる背景を知っておくことはもっと大事です。本書はその「原因」や「背景」について、きっちりページ数を割いています。たとえばJavaコンパイラガベージコレクション、ヒープメモリやスタック領域がそもそもどういうものであるか、それらがどのようなアルゴリズムや機能を備えているか、そしてそのアルゴリズムや機能がどのようにJavaのパフォーマンスに影響するのか。通常のプログラミング作業を行ううえではほとんど意識しない領域、俗に低レイヤといわれる領域の話がみっちりと解説されており、わたしのように初心者から中級者の脱皮に悩むプログラマには最適だと思いました。

最後にパフォーマンスの観点で「通常のプログラミング」の際に気を付けるべき事項まで、本書は丁寧に解説しています。パフォーマンス監視やチューニングというと、ツールを駆使したり、設定とにらめっこしたりすることが想起しがちで、実際そういう側面も否定しきれないのですが、しかしコーディングの時点で気を付けなければならない問題、あるいは気をつけておけば発生しなかった問題というのは当然存在します。「+=による文字列結合は避ける」「jdbcを利用したDB操作の際はトランザクションを保ちすぎずに頻繁にコミットする」という基本的なところから、データのシリアライズやスレッドの効率的な利用法という応用編まで、パフォーマンスに関するテーマが幅広く扱われており、とても勉強になりました。

最近はハードウェアのスペック向上が著しいこと、「低レイヤ」のアルゴリズムが洗練されていることから、富豪的なプログラミングでも意外に平気だったりしますが、しかし油断していると火を噴き始めるのがパフォーマンス問題。みんなが困っているところで、問題をさっそうと解決する、あるいは解決までの道筋を立てることができると、かなりの強みになりそう。またパフォーマンスに強い関心がなくても、低レイヤの動きやJavaプログラミングの常識的なところも学べるので、Java初心者を脱したい人にはおすすめできると思います。まずは1-2回通読することで本書に何が書かれているかを頭の片隅に入れており、いざパフォーマンスが発火しだしたときに、本書片手に問題対応するというのが良いのではないでしょうか?


余談: 監訳を務めている「Acroquest Technology株式会社」という会社。どこかで聞き覚えがあると思ったら『Java本格入門』(技術評論社)の筆者陣が所属している会社のようです。この『Java本格入門』も超よかったのでおすすめ(´・ω・`)

nekotheshadow.hatenablog.com