今天在看別人寫的代碼的時候發現寫了個內存監控線程的程序,我覺得有意思就在網上查了相關資料。
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(例如,當系統的虛擬內存不足時)。
直接看demo吧!
在實際開發中,一般可以用這個監控線程占用內存使用情況。
package javademo;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryUsage;
public class MemoryUseTest {
public String getMemoryUseInfo(){
MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
long getCommitted = mu.getCommitted();
long getInit = mu.getInit();
long getUsed = mu.getUsed();
long max = mu.getMax();
return ">>getCommitted(MB)=>" + getCommitted / 1000 / 1000 + "\n"
+">>getInit(MB)=" + getInit / 1000 / 1000 + "\n"
+">>getUsed(MB)=" + getUsed / 1000 / 1000 + "\n"
+">>max(MB)=" + max / 1000 / 1000 + "\n";
}
public static void main(String[] args){
System.out.println(new MemoryUseTest().getMemoryUseInfo());
}
}
我最近覺得一個網絡詞寫的很好,說出來與大家共勉。"切莫裝逼,虛度光陰",哈哈哈。。。