gpt4 book ai didi

java - 为什么强制垃圾收集会增加分配给 java 进程的内存?

转载 作者:行者123 更新时间:2023-12-02 11:17:39 25 4
gpt4 key购买 nike

所以我有这个代码:

public static void main(String[] args) throws Exception {
Thread.sleep(5000);
System.out.println("Creating array...");
Integer[] integers = new Integer[Integer.MAX_VALUE/32];
Thread.sleep(5000);
System.out.println("Destroying array");
integers = null;
//System.gc ();
//System.runFinalization ();
Thread.sleep(60000);
}

当我运行此代码时,大约 5 秒后,我将在 Activity 监视器中看到 268 MB 的 RAM 被分配给 java 进程。

当我在控制台中看到“销毁数组”后取消注释注释行(System.gc 和以下行)时,分配的内存增加到 278 MB。

我可以理解,内存没有被释放是因为System.gc()只是对JVM的一个提示,但是为什么会增加10MB呢?此时内存中加载了什么?

最佳答案

分配的内存并不一定意味着对象占用的内存。它可以是空的堆空间。

Java GC 是复制/压缩收集器,为了复制工作,它们需要一些 TO 空间作为非垃圾的复制目的地。

通过强制垃圾收集,您会干扰 GC 的启发式方法,例如及其暂停时间目标或吞吐量目标。为了补偿,它可能会决定给自己更多的喘息空间 - 在配置的最大堆大小的范围内 - 以仍然满足这些目标。

我不知道它是否适用于所有 GC 算法,但使用 -XX:+PrintAdaptiveSizePolicy 进行日志记录可能会提供一些见解。

关于java - 为什么强制垃圾收集会增加分配给 java 进程的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28380208/

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