加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 以编程方式检查可用的heapSize?

发布时间:2020-12-14 23:47:39 所属栏目:Java 来源:网络整理
导读:我正在使用 Eclipse.问题是如果分配的内存少于512MB,我的应用程序崩溃.现在还有在开始大量内存穷举处理之前检查程序的可用内存吗? 例如,我知道我们可以检查可用的JVM堆大小: long heapSize = Runtime.getRuntime().totalMemory();System.out.println("Heap
我正在使用 Eclipse.问题是如果分配的内存少于512MB,我的应用程序崩溃.现在还有在开始大量内存穷举处理之前检查程序的可用内存吗?
例如,我知道我们可以检查可用的JVM堆大小:
long heapSize = Runtime.getRuntime().totalMemory();
System.out.println("Heap Size = " + heapSize);

问题是,这给出了JVM堆大小.即使增加它也无法使用Eclipse.在Eclipse中,如果我更改VM参数,那么它可以工作.但是,上述声明的打印输出始终相同.有没有命令我可以准确地知道我为特定应用程序分配了多少内存?

解决方法

您可以使用 JMX在运行时收集堆内存的使用情况.

代码示例:

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryType;
import java.lang.management.MemoryUsage;

for (MemoryPoolMXBean mpBean: ManagementFactory.getMemoryPoolMXBeans()) {
    if (mpBean.getType() == MemoryType.HEAP) {
        System.out.printf(
            "Name: %s: %sn",mpBean.getName(),mpBean.getUsage()
        );
    }
}

输出示例:

Name: Eden Space: init = 6619136(6464K) used = 3754304(3666K) committed = 6619136(6464K) max = 186253312(181888K)
Name: Survivor Space: init = 786432(768K) used = 0(0K) committed = 786432(768K) max = 23265280(22720K)
Name: Tenured Gen: init = 16449536(16064K) used = 0(0K) committed = 16449536(16064K) max = 465567744(454656K)

如果您对“伊甸园空间”或“幸存者空间”有疑问,请查看How is the java memory pool divided

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读