查看當前JVM記憶體的使用方式

來源:互聯網
上載者:User

java.lang.Runtime類提供了java.lang.Runtime類提供了查看當前JVM記憶體的使用方式。每個java執行個體(即虛擬機器執行個體)只有一個Runtime的執行個體,通過Runtime.getRuntime()可以得到當前虛擬機器中的Runtime執行個體對象。

Runtime提供3個方法可以擷取當前JVM最大可以使用記憶體、當前JVM已擁有最大記憶體和剩餘未使用記憶體。這3個記憶體指的都是JVM堆記憶體。

Runtime.maxMemory();

Runtime.totalMemory();

Runtime.freeMemory();

首先在JAVA的啟動參數中加入指定-Xmx100m,設定JVM堆最大可以使用100m的記憶體。

Runtime run = Runtime.getRuntime();

long max = run.maxMemory();

long total = run.totalMemory();

long free = run.freeMemory();

long usable = max - total + free;

System.out.println("最大記憶體 = " + max);
System.out.println("已指派記憶體 = " + total);
System.out.println("已指派記憶體中的剩餘空間 = " + free);
System.out.println("最大可用記憶體 = " + usable);

上面代碼的輸出結果如下(這些記憶體大小與運行環境相關)

最大記憶體 = 104071168
已指派記憶體 = 5177344
已指派記憶體中的剩餘空間 = 4937280
最大可用記憶體 = 103831104

最大記憶體(maxMemory)是通過啟動JAVA虛擬機器時使用參數-Xmx100m指定的,而輸出也確實是100m。這表示JVM的堆記憶體最大可以使用104071168位元組。

已指派記憶體(totalMemory)jvm使用的記憶體都是從本地系統擷取的,但是通常jvm剛啟動的時候,並不會向系統申請全部的記憶體。而是根據所載入的Class和相關資源的容量來決定的。在本例中,由於只在一個main()主方法中執行了上面的幾行簡單的代碼。所以JVM只申請了5177344位元組的記憶體。

已指派記憶體中的剩餘空間(freeMemory) 這是相對以分配記憶體(totalMemeory)計算的,相當於totalMemory - 已使用記憶體。當freeMemory 快要接近0時,以分配的記憶體即將耗盡,JVM會決定再次向系統申請更多的記憶體。

最大可用記憶體 (usable)這是JVM真正還可以再繼續使用的記憶體(不考慮之後記憶體回收再次得到的記憶體)。由【最大記憶體 - 已指派記憶體 + 已指派記憶體中的剩餘空間】計算得到。

。每個java執行個體(即虛擬機器執行個體)只有一個Runtime的執行個體,通過Runtime.getRuntime()可以得到當前虛擬機器中的Runtime執行個體對象。

Runtime提供3個方法可以擷取當前JVM最大可以使用記憶體、當前JVM已擁有最大記憶體和剩餘未使用記憶體。這3個記憶體指的都是JVM堆記憶體。

Runtime.maxMemory();

Runtime.totalMemory();

Runtime.freeMemory();

首先在JAVA的啟動參數中加入指定-Xmx100m,設定JVM堆最大可以使用100m的記憶體。

Runtime run = Runtime.getRuntime();

long max = run.maxMemory();

long total = run.totalMemory();

long free = run.freeMemory();

long usable = max - total + free;

System.out.println("最大記憶體 = " + max);
System.out.println("已指派記憶體 = " + total);
System.out.println("已指派記憶體中的剩餘空間 = " + free);
System.out.println("最大可用記憶體 = " + usable);

上面代碼的輸出結果如下(這些記憶體大小與運行環境相關)

最大記憶體 = 104071168
已指派記憶體 = 5177344
已指派記憶體中的剩餘空間 = 4937280
最大可用記憶體 = 103831104

最大記憶體(maxMemory)是通過啟動JAVA虛擬機器時使用參數-Xmx100m指定的,而輸出也確實是100m。這表示JVM的堆記憶體最大可以使用104071168位元組。

已指派記憶體(totalMemory)jvm使用的記憶體都是從本地系統擷取的,但是通常jvm剛啟動的時候,並不會向系統申請全部的記憶體。而是根據所載入的Class和相關資源的容量來決定的。在本例中,由於只在一個main()主方法中執行了上面的幾行簡單的代碼。所以JVM只申請了5177344位元組的記憶體。

已指派記憶體中的剩餘空間(freeMemory) 這是相對以分配記憶體(totalMemeory)計算的,相當於totalMemory - 已使用記憶體。當freeMemory 快要接近0時,以分配的記憶體即將耗盡,JVM會決定再次向系統申請更多的記憶體。

最大可用記憶體 (usable)這是JVM真正還可以再繼續使用的記憶體(不考慮之後記憶體回收再次得到的記憶體)。由【最大記憶體 - 已指派記憶體 + 已指派記憶體中的剩餘空間】計算得到。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.