gpt4 book ai didi

java - 在 java 中运行循环后,freememory 正在增加

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:50 24 4
gpt4 key购买 nike

我用java写了简单的代码如下

public static void main(String[] args) {
String st ="Java";
StringBuffer sb = new StringBuffer(st);
long startTime = System.currentTimeMillis();
Runtime r = Runtime.getRuntime();
long startm = r.freeMemory();

System.out.println("Before running program free memory is: "+startm);

for(int i=0; i<10000; i++)
st+="is";

long endm = r.freeMemory();
System.out.println("After program free memory is: "+endm);
}

但是问题是当我运行程序时,循环结束后空闲内存在增加,但它应该比程序开始时少。我的输出如下:

运行程序前空闲内存为:61089768

程序后空闲内存为:123747064

请告诉我这是为什么?

最佳答案

您的代码产生了大量对象垃圾。线路

st+="is";

转换为:

st = new StringBuffer().append(st).append("is").toString();

这意味着每个循环至少产生两个垃圾对象。

在进入循环之前,对象堆上已经有Java启动时产生的垃圾。您的循环会触发垃圾收集器,不仅会从您的程序中释放不需要的对象,还会释放 Java 启动时留下的所有其他对象。

使用参数 -XX:+PrintGCDetails 启动您的程序,您将看到 GC 何时运行。

关于java - 在 java 中运行循环后,freememory 正在增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34260226/

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