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真正還可以再繼續使用的內存(不考慮之後垃圾回收再次得到的內存)。由【最大內存 - 已分配內存 + 已分配內存中的剩餘空間】計算得到。
查看當前JVM內存的使用情況
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Java项目面试实操 提升大厂面试成功率
wy53780
2020-04-23 14:14:04
玩转算法系列--图论精讲 面试升职必备(Java版)
wy53780
2020-04-23 14:03:23
玩转Java并发工具,精通JUC,成为并发多面手
wy53780
2020-04-23 13:56:08
线程八大核心+Java并发底层原理精讲(Java并发核心知识体系精讲)
wy53780
2020-04-23 13:55:55
Java通用型支付+电商平台双系统实战
wy53780
2020-04-23 13:54:42
【躍遷之路】【734天】程序員高效學習方法論探索系列(實驗階段491-2019.2.24)
Wall_Breaker
2019-02-24 23:25:10
Java是怎麼運行的?
勤思
2019-02-24 22:52:36
sql語法、關係建模
死瘦宅
2019-02-24 22:35:22
MySQL 事務、函數、觸發器、數據庫備份、權限管理
死瘦宅
2019-02-24 22:35:12
Python與家國天下
豌豆花下貓
2019-02-24 22:22:40
Java面試 | 002
Java貓說
2019-02-24 21:05:12
《從0到1學習Flink》—— Flink 讀取 Kafka 數據批量寫入到 MySQL
zhisheng
2019-02-24 21:04:11
Redis | 001能做什麼?
Java貓說
2019-02-24 21:03:51
java中具有繼承關係的類及其對象初始化順序
Linus脫襪子
2019-02-24 19:55:05