
Javaパフォーマンスチューニング
第5回 メモリ・リークの発見
テクニカルライター
小林聡史
2005/5/26
|
Javaパフォーマンス・チューニングのポイントにメソッド・コールの調査、メモリ・リークの発見があります。
メソッド・コールを調査することによって、実行時間やリソースの大半を消費しているメソッドを見つけ出し、その原因を特定し、パフォーマンス向上の糸口とすることができます。
その分析にはプロファイリング・ツールを用いるのが有効ですが、HPの「HPjmeter」(用語解説参照)も、こうした分析作業に最適な機能を備えています。
図1は、HPjmeterを利用し、Javaプログラム中のメソッドを呼び出し回数が多い順に一覧表示した画面です。この例では、「bel」メソッド(画面の最上行)の実行回数がほかのメソッドに比べて非常に多いことが示されています。
![]() |
| 図1 HPjmeterによるメソッド呼び出し回数の表示 |
また、HPjmeterに備わるもう1つの計測項目である「Exclusive CPU Method Time(CPU占有時間)」を使用すれば、Javaプログラムの各メソッドの実行時間を知ることができます(図2)。
![]() |
| 図2 HPjmeterによるメソッド実行時間の表示 |
メソッドのコール回数はパフォーマンス低下の原因になりますが、メモリ・リークはもっと致命的なダメージをアプリケーションにもたらします。
| 用語解説 ■HPjmeter JVMのプロファイリング・ツール。メソッドのコール回数や経過時間、コールグラフのツリー表示、生成/残存オブジェクトなどをグラフィカルに表示する。アプリケーション解析に役立つ数多くの情報を提供する。詳細情報は、以下のページを参照。 http://www1.jpn.hp.com/products/software/development/java/tool/ jmeter/index.html |
| メモリ・リークの原因を探る |
メモリ・リークは、Javaプログラムの開発において最も注意すべきことの1つです。メモリ・リークによってJavaプログラムの実行中にJVMのヒープ・メモリが不足すると、OutOfMemoryエラーが発生し、プログラムの実行を継続できなくなったりJVMが異常終了したりします。
本連載の第2回「Javaのガベージ・コレクションを知る」で説明したとおり、Javaオブジェクトが必要とするメモリ領域は、JVMのヒープ・メモリから自動的に割り当てられます。また、不要になった(どこからも参照されなくなった)Javaオブジェクトはガベージ・コレクションによって収集され、そのメモリ領域は自動的に解放されます。よって、メモリ領域の確保や解放をプログラマが意識する必要がありません。そのため、Javaでは、CやC++のようなメモリ・リークが多発することはなくなりました。
例えばC++の場合、以下のようなコードによって、メモリ・リークが発生します。
ptr = new LargeObjectType(); |
ここでは、変数ptrにC++オブジェクトのポインタを割り当て、使用後にnullをセットしています。しかし、正しくは「delete ptr」と記述し、C++オブジェクトのメモリ領域を解放しなくてはなりません。こうしたdeleteし忘れが、C++におけるメモリ・リークの主な発生原因です。Javaでは、このdeleteに相当する作業をJVMのガベージ・コレクタが実行してくるため、こうしたタイプのメモリ・リークは起こらなくなりました。
■メモリ・リテンションとは
しかし、Javaにおいても、メモリ・リークが完全になくなったわけではありません。例えば、JavaオブジェクトAのオブジェクト変数fooが、JavaオブジェクトBを参照しているケースを考えます。この場合、たとえBがプログラムの処理上は不要になったとしても、fooからBへの参照が存在する限り、Bはガベージ・コレクションの対象とはなりません。このように、プログラマが予想しないところでオブジェクトの参照が残ってしまうことを、「メモリ・リテンション」と呼びます。特に、コレクションや配列を参照元とするメモリ・リテンションが多発すると、解放されないJavaオブジェクトが継続的に増加し、メモリ・リーク状態に陥ります。
| 1/2 |
|
INDEX |
||
| Javaパフォーマンスチューニング 第5回 | ||
| Page1 メモリ・リークの原因を探る |
||
| Page2 メモリ・リークの発見の方法 |
||
Javaパフォーマンスチューニング バックナンバー
ホワイトペーパー(TechTargetジャパン)
- Webの表示速度を遅くする「SSLハンドシェイク」とは (2010/2/9)
安全性を担保しようとWebページにSSLを適用すると、負荷の高い処理が実行される。速度と安全性は両立できるのか? - クラウド活用「雲活」のために押さえるべき39のポイント (2010/2/2)
活用するべきサービスか否か、クラウドの利点・問題点、クラウドプラットフォーム提供企業になるための条件、開発者がするべきことに分けて紹介 - 再利用性の高いクラス作成に重要な“アクセス制御” (2010/1/28)
Javaのアクセス修飾子public、private、protectedや、Eclipseで簡単に作れるアクセサメソッドgetter、setterについて解説 - DB設計の神ツール「ERMaster」なら、ここまでできる (2010/1/21)
直感的なUIに、カスタマイズ可能な、Excel出力のテーブル定義書、辞書機能など多機能なERモデリングの無料Eclipseプラグインです
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |




本記事は、



