|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface MemoryMXBean
Java 虛擬機器記憶體系統的管理介面。
Java 虛擬機器具有此介面的實作類別的單一實例。實作此介面的實例是一個 MXBean,可以通過調用 ManagementFactory.getMemoryMXBean()
方法或從平臺 MBeanServer
方法獲得。
在 MBeanServer 中唯一標識記憶體系統的 MXBean 的 ObjectName 為:
java.lang:type=Memory
堆積(heap)空間的大小可以固定,也可以擴大和縮小。堆積(heap)空間的記憶體不需要是連續空間。
Java 虛擬機器具有一個由所有執行緒共享的方法區。方法區屬於非堆積(heap)空間記憶體。它存儲每個類別結構,如運行時常數池、欄位和方法資料,以及方法和建構子的程式碼。它是在 Java 虛擬機器啟動時創建的。
方法區在邏輯上是堆積(heap)空間的一部分,但 Java 虛擬機器實作可以選擇不對其進行回收或壓縮。與堆積(heap)空間類似,方法區的大小可以固定,也可以擴大和縮小。方法區的記憶體不需要是連續空間。
除了方法區外,Java 虛擬機器實作可能需要用於內部處理或優化的記憶體,這種記憶體也是非堆積(heap)空間記憶體。例如,JIT 編譯器需要記憶體來存儲從 Java 虛擬機器程式碼轉換而來的本機程式碼,從而獲得高性能。
記憶體池
和記憶體管理器
都是抽象實體,對 Java 虛擬機器的記憶體系統進行監視和管理。
記憶體池表示 Java 虛擬機器管理的記憶體區域。Java 虛擬機器至少有一個記憶體池,而且可以在執行期間創建或刪除記憶體池。記憶體池可以是堆積(heap)空間記憶體,也可以是非堆積(heap)空間記憶體。
記憶體管理器負責管理一個或多個記憶體池。垃圾回收器就是一種記憶體管理器,負責回收不可到達物件佔用的記憶體。Java 虛擬機器可以有一個或多個記憶體管理器。可以在運行期間添加或刪除記憶體管理器。一個記憶體池可以由多個記憶體管理器進行管理。
可以採用三種方式監視記憶體使用量:
MemoryPoolMXBean
介面中指定。
記憶體使用量監視機制旨在用於負載平衡或工作負載分佈。例如,應用程序在其記憶體使用量超過特定閾值時,將會停止接收任何新的工作負載。它不適合用於供應用程序進行檢測並從低記憶體情況恢復。
此 MemoryMXBean 是一個 NotificationEmitter
,如果任何一個記憶體池支持使用量閾值或集合使用量閾值(可以通過調用 MemoryPoolMXBean.isUsageThresholdSupported()
和 MemoryPoolMXBean.isCollectionUsageThresholdSupported()
方法確定),它將發出兩種型別的通知
。
使用量閾值超過通知
- 用於通知記憶體池的記憶體使用量增加,已達到或超過其使用量閾值。
集合使用量閾值超過通知
- 用於通知在 Java 虛擬機器對記憶體池中不使用的物件進行了回收工作之後,該記憶體池的記憶體使用量已大於或等於其集合使用量閾值。
發出的通知是一個 Notification
實例,其使用者資料
設置為 CompositeData
(表示包含建構該通知時記憶體池資訊的 MemoryNotificationInfo
物件)。CompositeData 套件含 MemoryNotificationInfo
中描述的各個屬性。
ManagementFactory.getMemoryMXBean()
返回的 MemoryMXBean 物件實作了 NotificationEmitter
介面,該介面允許在 MemoryMXBean 中將偵聽器註冊為通知偵聽器。
以下範例程式碼將註冊 MyListener 以處理 MemoryMXBean 發出的通知。
class MyListener implements javax.management.NotificationListener { public void handleNotification(Notification notif, Object handback) { // handle notification .... } } MemoryMXBean mbean = ManagementFactory.getMemoryMXBean(); NotificationEmitter emitter = (NotificationEmitter) mbean; MyListener listener = new MyListener(); emitter.addNotificationListener(listener, null, null);
方法摘要 | |
---|---|
void |
gc()
運行垃圾回收器。 |
MemoryUsage |
getHeapMemoryUsage()
返回用於物件分派的堆積(heap)空間的當前記憶體使用量。 |
MemoryUsage |
getNonHeapMemoryUsage()
返回 Java 虛擬機器使用的非堆積(heap)空間記憶體的當前記憶體使用量。 |
int |
getObjectPendingFinalizationCount()
返回其終止被掛起的物件的近似數目。 |
boolean |
isVerbose()
測試記憶體系統的 verbose 輸出是否已啟用。 |
void |
setVerbose(boolean value)
啟用或禁用記憶體系統的 verbose 輸出。 |
方法詳細資訊 |
---|
int getObjectPendingFinalizationCount()
MemoryUsage getHeapMemoryUsage()
返回的記憶體使用量中已使用記憶體量為活動物件和尚未回收的垃圾物件(如果有)所佔用記憶體的總量。
MBeanServer 存取:
MemoryUsage 的映射型別為 CompositeData,具有 MemoryUsage
中指定的屬性。
MemoryUsage
物件。MemoryUsage getNonHeapMemoryUsage()
MBeanServer 存取:
MemoryUsage 的映射型別為 CompositeData,具有 MemoryUsage
中指定的屬性。
MemoryUsage
物件。boolean isVerbose()
void setVerbose(boolean value)
此方法的每次調用都會全體啟用或禁用 verbose 輸出。
value
- 為 true 將啟用 verbose 輸出;為 false 將禁用輸出。
SecurityException
- 如果存在安全管理器,且調用方不具有 ManagementPermission("control")。void gc()
gc()
實際上等同於調用:
System.gc()
System.gc()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。