介紹一個看到的很有意思的Java類MemoryUsage,通過MemoryUsage可以檢視Java 虛拟機的記憶體池的記憶體使用情況。
MemoryUsage類有四個值(均以位元組為機關):
Init:java虛拟機在啟動的時候向作業系統請求的初始記憶體容量,java虛拟機在運作的過程中可能向作業系統請求更多的記憶體或将記憶體釋放給作業系統,是以init的值是不确定的。
Used:目前已經使用的記憶體量。
Committed:表示保證java虛拟機能使用的記憶體量,已送出的記憶體量可以随時間而變化(增加或減少)。Java 虛拟機可能會将記憶體釋放給系統,committed 可以小于 init。committed 将始終大于或等于 used。
Max:表示可以用于記憶體管理的最大記憶體量(以位元組為機關)。可以不定義其值。如果定義了該值,最大記憶體量可能随時間而更改。已使用的記憶體量和已送出的記憶體量将始終小于或等于 max(如果定義了 max)。如果記憶體配置設定試圖增加滿足以下條件的已使用記憶體将會失敗:used > committed,即使 used <= max 仍然為 true(例如,當系統的虛拟記憶體不足時)。
- MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
- long getCommitted = mu.getCommitted();
- long getInit = mu.getInit();
- long getUsed = mu.getUsed();
- long max = mu.getMax();
- out.println(">>getCommitted(byte)>>"+getCommitted+"<br/>");
- out.println(">>getInit(byte)>>"+getInit+"<br/>");
- out.println(">>getUsed(byte)>>"+getUsed+"<br/>");
- out.println(">>max(byte)>>"+max+"<br/>");
- out.println("===================================<br/>");
- out.println(">>getCommitted(KB)>>"+getCommitted/1000+"<br/>");
- out.println(">>getInit(KB)>>"+getInit/1000+"<br/>");
- out.println(">>getUsed(KB)>>"+getUsed/1000+"<br/>");
- out.println(">>max(KB)>>"+max/1000+"<br/>");
- out.println("===================================<br/>");
- out.println(">>getCommitted(MB)>>"+getCommitted/1000/1000+"<br/>");
- out.println(">>getInit(MB)>>"+getInit/1000/1000+"<br/>");
- out.println(">>getUsed(MB)>>"+getUsed/1000/1000+"<br/>");
- out.println(">>max(MB)>>"+max/1000/1000+"<br/>");