Java语言规范允许使用伪gc()方法.为什么?

gam*_*ver 5 java

我很难理解以下内容:

"Java语言规范允许使用虚拟gc()方法."

为什么标准会这样做?
它有效地使java 可选的一个非常重要的功能.
这也意味着我的同一个程序在两个不同的JVM实现上表现不同!完全违反Java 可移植性的重要特性.

Kon*_*lph 13

它有效地使java可选的一个非常重要的功能.

在Java中,GC 不是可选的.什么是可选的是显式垃圾收集,由调用触发gc().这是完全可以接受的,因为很少需要显式地触发垃圾收集并且干扰现代垃圾收集器的功能.


Boz*_*zho 6

调用gc方法表明Java虚拟机花费了大量精力来回收未使用的对象,以使其当前占用的内存可用于快速重用.当控制从方法调用返回时,Java虚拟机已尽最大努力从所有丢弃的对象中回收空间.

gc()不保证调用会触发垃圾回收.即你不能强迫垃圾收集.这就是为什么这个方法可以是假的.

上面提到的"尽力而为"可能是"等待隐式垃圾收集".

  • 实际上,基本上这只是告诉JVM/KVM"嘿,你能不能尽可能快地获取gc,如果目前可行的话." (2认同)