为什么在垃圾收集injava中发生这种情况

maX*_*nda 3 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());
Run Code Online (Sandbox Code Playgroud)

输出是

Free memory in JVM before Garbage Collection = 12184624
Free memory in JVM after Garbage Collection = 12184360    
Run Code Online (Sandbox Code Playgroud)

看前值大于后值.

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

谢谢.

Kon*_*Kon 6

在Java中调用垃圾收集仅仅是对JVM的建议.从技术上来说,收集垃圾的方式是100%无法控制的.调用System.gc()礼貌地建议应该删除垃圾,但Java完全有权忽视你,就像一个不听话的孩子.

虽然它会按照你的要求通常做,但它并不总是如此,你肯定不能依赖它.

  • 供参考,http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#gc() (2认同)
  • 太糟糕了System.gc()没有返回一个布尔值,所以你可以通过威胁System.exit()来扼杀孩子,如果它没有做家务.JVM有时是无情的抗议活动. (2认同)