9

私が直面した問題は、使用するアプリケーションのメモリが100MBで、その後50MB減少したことですが、ウィンドウタスクマネージャーでは150MBを示し、常に維持または増加しますが、減少はしません。タスクマネージャーでメモリ(プライベートワーキングセット)を減らすにはどうすればよいですか?

4

1 に答える 1

13

(または他の監視ツール) で表示されてJConsoleいるのは、Java メモリが使用されているパターンです。

JVM のメモリは通常、これらの領域に分割されます (監視ツールにも表示されます)。

  1. Java オブジェクト用のヒープメモリ
  2. Java がロードされたクラスとメタデータ、および JVM コードを格納する場所である非ヒープ メモリ
  3. dll および Java のネイティブ コード用に予約されているメモリの一部であるネイティブ メモリ (非常に低レベル)。ヒープ メモリが十分にある場合でも、この領域で OOM が発生することがあります (Max Heapサイズを大きくすると、使用可能なネイティブ メモリが減少するため)。

Windows のタスク マネージャーには、それが表示されません。アプリケーションで使用されるメモリ全体(ヒープ + 非ヒープ + ネイティブ部分) を示します。

また、通常、プロセスは OS からより多くのメモリを要求しますが、実際のアプリケーションがメモリを「解放」しても、このメモリは保持されます。これらのメモリ ページは、プロセスのアドレス空間の一部としてマップされています。したがって、タスク マネージャーでは、メモリが減少するパターンは見られませんが、それはアプリケーションからのメモリ リークを示すものではありません。
したがって、タスク マネージャーから表示されるメモリを減らすことはできませんが、監視ツールから表示されるメモリはある時点で減少するはずです。そうでない場合は、メモリ リークを示している可能性があります。

于 2012-08-18T09:30:22.967 に答える