java - 为什么在 java 的垃圾收集中会发生这种情况

标签 java swing garbage-collection concept

据我所知,当我使用 System.gc() 方法运行垃圾收集时,它将从堆中收集所有未使用和未销毁的对象并进行清理。所以当我运行 System.gc(); JVM 的内存应该增加。但是在下面的代码中,当我运行它时,结果让我感到困惑。

Runtime rs = Runtime.getRuntime();
System.out.println("Free memory in JVM before Garbage Collection = " + 
                   rs.freeMemory());
rs.gc();
System.out.println("Free memory in JVM after Garbage Collection = " +
                   rs.freeMemory());

输出是

Free memory in JVM before Garbage Collection = 12184624
Free memory in JVM after Garbage Collection = 12184360    

看到前值大于后值。

如果我的概念有误,请纠正我或解释为什么会这样。

谢谢。

最佳答案

在 Java 中调用垃圾收集只是对 JVM 的建议。垃圾收集的方式在技术上是 100% 无法控制的。调用 System.gc() 礼貌地建议把垃圾拿出来,但 Java 有权利像不听话的 child 一样完全无视你。

虽然它通常会按照您的要求进行操作,但它不会总是如此,您当然不能依赖它。

关于java - 为什么在 java 的垃圾收集中会发生这种情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117816/

相关文章:

java - 在哪里可以获取 OneDrive MSA 身份 validator ?

java - 如何更改 joptionpane 的大小和字体?

java - Java 垃圾收集器如何处理自引用?

java - 为什么它只绘制其中一个组件?

java - 删除按钮的矩形边框

python - 什么时候在 python 中收集对象垃圾?

c# - 我可以强制 .NET XmlDocument 实例尽快释放它占用的内存吗?

java - 比 jdb 更好的 Java 远程调试器?

java - 关于在 Java 中使用 OutputStream 的说明?

java - apk 文件中的 jsr305_annotations 文件夹