2

メモリプール Bean の CollectionUsage、PeakUsage、Usage フィールドの違いは何ですか?
jconsole ウィンドウの任意のアプリケーションのパスでこれらを確認しました:
[mbeans] タブ > [java.lang] > [memorypool] > [任意の Bean を選択]。 右側のペイン
に 、これらの属性が表示されます。

4

1 に答える 1

5

これらはすべて、 MemoryPoolMXBeanのjavadocsで説明されています

メモリ使用量

getUsage()メソッドは、メモリプールの現在の使用量の見積もりを提供します。ガベージコレクションされたメモリプールの場合、使用されるメモリの量には、到達可能なオブジェクトと到達不可能なオブジェクトの両方を含む、プール内のすべてのオブジェクトが占めるメモリが含まれます。

一般に、この方法は、おおよそのメモリ使用量を取得するための軽量な操作です。一部のメモリプールでは、たとえば、オブジェクトが連続してパックされていない場合、このメソッドは、現在のメモリ使用量を決定するために何らかの計算を必要とするコストのかかる操作になる可能性があります。これが当てはまる場合、実装は文書化する必要があります。

ピークメモリ使用量

Java仮想マシンは、仮想マシンが開始された後、またはピークがリセットされた後、メモリプールのピークメモリ使用量を維持します。ピークメモリ使用量はgetPeakUsage()メソッドによって返され、resetPeakUsage()メソッドを呼び出すことによってリセットされます。

コレクション使用しきい値

コレクション使用量のしきい値は、一部のガベージコレクションされたメモリプールにのみ適用可能な管理可能な属性です。Java仮想マシンが、ガベージコレクション時にメモリプール内の未使用のオブジェクトをリサイクルすることによってメモリスペースを再利用するために労力を費やした後も、ガベージコレクションされたメモリプール内のいくつかのバイトは引き続き使用されます。コレクション使用量のしきい値を使用すると、このバイト数に値を設定して、しきい値を超えた場合に、コレクション使用量のしきい値を超えたという通知がMemoryMXBeanによって発行されるようにすることができます。さらに、コレクション使用量のしきい値カウントが増加します。

isCollectionUsageThresholdSupported()メソッドを使用して、この機能がサポートされているかどうかを判断できます。

Java仮想マシンは、メモリプールベースでコレクション使用量のしきい値チェックを実行します。このチェックは、コレクション使用量のしきい値が正の値に設定されている場合に有効になります。コレクション使用量のしきい値がゼロに設定されている場合、このチェックはこのメモリープールで無効になります。デフォルト値はゼロです。Java仮想マシンは、ガベージコレクション時にコレクション使用量のしきい値チェックを実行します。

一部のガベージコレクションされたメモリプールは、コレクション使用量のしきい値をサポートしないことを選択する場合があります。たとえば、メモリプールは、継続的な同時ガベージコレクタによってのみ管理されます。オブジェクトは、スレッドによってこのメモリプールに割り当てられますが、未使用のオブジェクトは、同時ガベージコレクターによって同時に再利用されます。メモリ使用量をチェックするのに最適な時間である明確に定義されたガベージコレクション時間がない限り、コレクション使用量のしきい値はサポートされるべきではありません。

コレクション使用量のしきい値は、Java仮想マシンがメモリスペースの再利用に労力を費やした後のメモリ使用量を監視するために設計されています。コレクションの使用状況は、同様の方法で、使用状況のしきい値について上記のポーリングおよびしきい値通知メカニズムによって監視することもできます。

于 2010-06-04T14:57:43.790 に答える