当前位置: 首页 > 知识库问答 >
问题:

计算JVM的已用内存

弘和同
2023-03-14

我想计算JVM堆的使用内存。我在一个示例应用程序中做了以下操作。

>

  • 将JVM堆大小设置为Xms=200mb和Xmx=200mb。

    使用Java运行时应用编程接口进行了如下计算。它给了我以下示例程序的输出。

    运行时总内存:192413696

    运行时最大内存:192413696

    运行时可用内存:39734096

    运行时可用内存=(最大-总空闲)=39734096

    已用内存百分比=100*(最大可用)/最大=100*(192413696-39734096)/192413696=79.35%

    通过JMX:java进行了另一次计算。lang:type=Memory(使用MBean)

    It gave me following output for the same program.
    
    Used memory : 127737896
    
    Max memory : 201850880
    
    Percentage of used memory = 100*(used/max) = 100* (127737896/201850880)= 
    63.28%
    

    你能帮我做以下事情吗?

    >

  • 使用JMX和Java运行时API之间存在差异的原因是什么?

    如果我想知道我的JVM堆中占用的内存,这是正确的方法(第2点或第3点)。我的意图是在我的JVM发生内存溢出之前发出警报。

    我还有另一个观察结果。当我使用CMS算法(将-Xms和-Xms设置为32GB,占用率设置为70%)时,我可以看到使用MBean和java runtime freeMemory()计算的可用内存之间的差异。当我使用G1时,我找不到这些差异(MBean和运行时API给出了相同的值)。

  • 共有2个答案

    单修德
    2023-03-14

    计算应使用内存/MaxMemory*100

    Used Memory = 127737896
    Max Memory = 201850880
    
    127737896 / 201850880 * 100 = 63.28%
    
    长孙章横
    2023-03-14
    Runtime rt = Runtime.getRuntime();
    long mem = rt.totalMemory();
    long fm = rt.freeMemory();
    long mm = rt.maxMemory();
    long used = mm - fm;
    
     类似资料:
    • 问题内容: 我有一个Map(String,String),我想找到一个条目和Map的内存大小。我读的地方,仪表可能是有用的(仪器)。有人有主意吗? 提前致谢。 问题答案: 对于64位JVM,空白实例应为24字节,对于32位JVM,空白实例应为12字节。这是我发现有用的@PeterLawrey的技术,基于MemoryUsageExamplesTest:

    • JVM选项:-Xms512M-Xmx512M-XX:PermSize=70M-XX:MaxPermSize=70M jstat-gc 8260 5000 S0C:512.0 S1C:512.0 S0U:0.0 S1U:0.0 EC:174080.0 EU:0.0 OC:349696.0 OU:45191.1 PC:71680.0 PU:34882.2 YGC:2216225 YGCT:6754.9

    • 问题内容: Linux内核: 4.10.0-20(通用)(也在4.11.3上尝试过) Ubuntu的: 17.04 我一直在尝试使用收集内存访问的统计信息。我能够 收集内存存储的统计信息,但内存负载的计数返回0值 。 以下是内存存储的详细信息: 对于内存负载,我 得到一个0计数 ,如下所示:- 我不明白为什么这算不上正确。 我是否应该以任何方式使用其他事件来获取正确的数据 ? 问题答案: 我已使用

    • 我参加了一个编程比赛,我无法解决问题,问题是: 给定一个n个整数的数组A,我需要计算给定范围内求逆的次数。提供一个整数m,它表示范围的数量,然后是m行,在每一行中给出两个整数li和ri。 我们必须只计算指定范围内的反转,即从li到ri(包括0)的反转(基于0的索引)。 如果 A[i] 两个元素 A[i] 和 A[j] 添加到反演中 反转是: 输入: 输出: 约束: 我知道在整个数组上计算O(nlo

    • 我有一个Tomcat webapp,它代表客户端执行一些相当大的内存和CPU密集型任务。这是正常的,也是所需的功能。但是,当我运行Tomcat时,内存使用量会随着时间的推移而猛增,达到4.0GB以上,这时我通常会关闭该进程,因为它会扰乱我开发机器上运行的其他所有内容: 我以为我的代码无意中引入了内存泄漏,但在使用VisualVM检查它之后,我看到了一个不同的情况: VisualVM显示该堆占用大约