1. 程式人生 > >【轉】Java類MemoryUsage檢視虛擬機器的使用情況

【轉】Java類MemoryUsage檢視虛擬機器的使用情況

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());     } }