私が直面した問題は、使用するアプリケーションのメモリが100MBで、その後50MB減少したことですが、ウィンドウタスクマネージャーでは150MBを示し、常に維持または増加しますが、減少はしません。タスクマネージャーでメモリ(プライベートワーキングセット)を減らすにはどうすればよいですか?
質問する
6546 次
1 に答える
13
(または他の監視ツール) で表示されてJConsole
いるのは、Java メモリが使用されているパターンです。
JVM のメモリは通常、これらの領域に分割されます (監視ツールにも表示されます)。
- Java オブジェクト用のヒープメモリ
- Java がロードされたクラスとメタデータ、および JVM コードを格納する場所である非ヒープ メモリ
- dll および Java のネイティブ コード用に予約されているメモリの一部であるネイティブ メモリ (非常に低レベル)。ヒープ メモリが十分にある場合でも、この領域で OOM が発生することがあります (
Max Heap
サイズを大きくすると、使用可能なネイティブ メモリが減少するため)。
Windows のタスク マネージャーには、それが表示されません。アプリケーションで使用されるメモリ全体(ヒープ + 非ヒープ + ネイティブ部分) を示します。
また、通常、プロセスは OS からより多くのメモリを要求しますが、実際のアプリケーションがメモリを「解放」しても、このメモリは保持されます。これらのメモリ ページは、プロセスのアドレス空間の一部としてマップされています。したがって、タスク マネージャーでは、メモリが減少するパターンは見られませんが、それはアプリケーションからのメモリ リークを示すものではありません。
したがって、タスク マネージャーから表示されるメモリを減らすことはできませんが、監視ツールから表示されるメモリはある時点で減少するはずです。そうでない場合は、メモリ リークを示している可能性があります。
于 2012-08-18T09:30:22.967 に答える