据我所知,当我使用 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/