gpt4 book ai didi

Java : Why there is no difference in JVM Heap Size even after Object Creation

转载 作者:行者123 更新时间:2023-11-29 10:18:44 25 4
gpt4 key购买 nike

我试图找出 JVM 堆大小与对象创建有何不同。

例如,如果您看到我下面的程序,我在 for 循环中创建了 10000 个字符串对象,但在我的 JVM 环境中堆大小仍然没有差异。

public class One {

public static void main(String args[]) {

long heapSizebefore = Runtime.getRuntime().totalMemory();
System.out.println("heapSizebefore" + heapSizebefore);

for (int i = 0; i <= 10000; i++) {
String str = new String();

}

long heapSizeafter = Runtime.getRuntime().totalMemory();
System.out.println("heapSizeafter" + heapSizeafter);

}

}

最佳答案

totalMemory 的调用只会为您提供 Java 进程保留的内存量。这并不意味着它正在被堆上的对象主动填充。作为javadocs也就是说,它是当前和 future 对象的可用内存总量。

事实上,Java 更喜欢从底层操作系统请求大块内存,而不是每次创建新对象时都必须调用 malloc(或等效方法)。

如果您想跟踪堆的实际大小,您可以使用 JConsole/JVisualVM 等工具简单地实时执行此操作,或者使用内存分析器更详细地执行此操作。如果您想以编程方式执行此操作,则需要为复杂的内容注册一个代理,但堆的详细信息是通过 JMX 公开的。查看 java.lang:Memory MBean 的 HeapMemoryUsage 属性(这是 JConsole 用来显示内存图表的内容)。

关于Java : Why there is no difference in JVM Heap Size even after Object Creation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11036244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com