2012-03-27 46 views

回答

10

下面是一段代碼片段,我們有定期登錄我們的應用程序的內存使用情況:

import java.lang.management.GarbageCollectorMXBean 
import java.lang.management.ManagementFactory 
import java.lang.management.MemoryPoolMXBean 
import java.lang.management.MemoryUsage 

ManagementFactory.getMemoryMXBean().getHeapMemoryUsage(); 
log("Heap", ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()); 
log("NonHeap", ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()); 
List<MemoryPoolMXBean> beans = ManagementFactory.getMemoryPoolMXBeans(); 
for (MemoryPoolMXBean bean: beans) { 
    log(bean.getName(), bean.getUsage()); 
} 

for (GarbageCollectorMXBean bean: ManagementFactory.getGarbageCollectorMXBeans()) { 
    log(bean.getName(), bean.getCollectionCount(), bean.getCollectionTime()); 
} 
1

你可以嘗試的VisualVM,一個Java剖析與每一位JDK去。你會在「bin」文件夾中找到它。

+0

我知道VisualVM,並且在我正在主動調試問題時使用它。但是在夜間運行期間會出現一些問題,這意味着我需要將它們記錄在某處以便稍後處理它們。 我當然可以讓VisualVM應用程序在夜間打開,但它不是我期待的長期解決方案,因爲日誌是永久性的,可以被系統上的所有用戶訪問,而不會與我的計算機綁定在一起:) – 2012-03-27 10:36:08