1. 程式人生 > >java 獲取非堆記憶體使用量

java 獲取非堆記憶體使用量

java.lang.management
類 MemoryUsage

java.lang.Object
  java.lang.management.MemoryUsage
public class MemoryUsage
extends Object

表示記憶體使用量快照的 MemoryUsage 物件。MemoryUsage 類的例項通常由某些特定的方法構造,這些方法用於獲得關於 Java 虛擬機器的單個記憶體池或 Java 虛擬機器的全部堆(或非堆)記憶體的記憶體使用量資訊。

MemoryUsage 物件包含四個值:

init 表示 Java 虛擬機器在啟動期間從作業系統請求的用於記憶體管理的初始記憶體容量(以位元組為單位)。Java 虛擬機器可能在執行過程中從作業系統請求更多的記憶體,也可能將記憶體釋放給系統。init
的值可以是不明確的。
used 表示當前已經使用的記憶體量(以位元組為單位)。
committed 表示保證可以由 Java 虛擬機器使用的記憶體量(以位元組為單位)。已提交的記憶體量可以隨時間而變化(增加或減少)。Java 虛擬機器可能會將記憶體釋放給系統,committed 可以小於 initcommitted 將始終大於或等於 used
max 表示可以用於記憶體管理的最大記憶體量(以位元組為單位)。可以不定義其值。如果定義了該值,最大記憶體量可能隨時間而更改。已使用的記憶體量和已提交的記憶體量將始終小於或等於 max(如果定義了 max)。如果記憶體分配試圖增加滿足以下條件的已使用記憶體將會失敗:used > committed
,即使 used <= max 仍然為 true(例如,當系統的虛擬記憶體不足時)。
以下是記憶體池的示例圖:
        +----------------------------------------------+
        +////////////////           |                  +
        +////////////////           |                  +
        +----------------------------------------------+

        |--------|
           init
        |---------------|
               used
        |---------------------------|
                  committed 
        |----------------------------------------------|
                            max