<分区>
我对 Java 性能有疑问。我尝试使用 GC1,但效果并不理想。我唯一的问题是为什么 JVM 保留 java 堆空间,即使它没有被使用? 正如您首先在图片中看到的那样,批处理工作在 10:30 左右完成,但没有触发垃圾收集器进行清理。所以我在 10:52 手动完成,然后释放了已用空间,但堆 (8GB) 仍由 JVM 分配。为什么 ?
<分区>
我对 Java 性能有疑问。我尝试使用 GC1,但效果并不理想。我唯一的问题是为什么 JVM 保留 java 堆空间,即使它没有被使用? 正如您首先在图片中看到的那样,批处理工作在 10:30 左右完成,但没有触发垃圾收集器进行清理。所以我在 10:52 手动完成,然后释放了已用空间,但堆 (8GB) 仍由 JVM 分配。为什么 ?
最佳答案
我在做与您完全相同的事情时也看到了这种趋势(参见此处)。解释很简单:JVM 不会将内存还给操作系统,即使它有很多空闲内存。我不知道 为什么
会这样的确切细节,但这与从 OS
请求内存很昂贵的事实有关(这是超-简化)。
所以我想这里的简单答案是 - 这是正常的。
在这里!我找到了我实际阅读过 this 的地方.
关于memory-management - 释放 Java 堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43341658/