このセクションでは、まずメモリー・リークのトラブルシューティング方法について説明し、その後で考えられるメモリー・リークの原因をいくつか示し、回避方法を説明します。
メモリー・リークの詳細情報を得るには、例10-2に示すように、java
の実行時にヒープ・プロファイラをアクティブにします。jhat
ユーティリティを使って出力を読み取れるように、出力をバイナリ形式で生成するよう指定します。
メモリー・リークのトラブルシューティングの詳細や、jhat
ユーティリティやその他の使用可能なトラブルシューティング・ツールについては、『Java SE HotSpot VMトラブルシューティング・ガイド』を参照してください。
次の問題が対処されます。
問題1: アプリケーションでのメモリー・リーク
原因: フレームやダイアログのガベージ・コレクションが行われないときがあります。このバグはJava SEの将来のバージョンで修正される予定です。
回避方法: 既知のメモリー・リークは、あるフォーカス可能なトップ・レベル要素(ウィンドウ、ダイアログ、フレーム)へのフォーカス移動がシステムによって開始されたが、フォーカス移動が完了する前にその要素がクローズ、非表示化、または破棄されてしまった場合に発生します。したがってアプリケーションは、フォーカス移動操作が完了するまで待ってから要素のクローズ、非表示化、または破棄を行う必要があります。
注: この問題は通常、これらのアクションがプログラム経由で実行される場合にのみ発生します。一般的に、ユーザーがこれらのアクションを実行する場合、問題が発生する速度で行うのは物理的に不可能であるからです。 |