这题搁了好久,都忘了问了。
以下程序打印什么结果?
- Java code
public class No_4 { public static void main(String[] args) { MyClass m = new MyClass(); m = null; System. gc(); MyClass. o = null ; System. gc(); }}class MyClass { public static MyClass o; protected void finalize() throws Throwable { System. out.println("finalize"); o = this ; }}
我在两台电脑上分别用eclipse ee和eclipse se跑,结果是:有时候会打印finalize,有时候什么都没有打印。而在main里边加入任意一条打印System.out.println("=====");,结果是一直都会打印finalize,但"====="和"finalize"的出现的顺序不定。
而在同学的电脑上跑,每次都打印finalize。。。
好苦恼啊,,谁知道为什么??顺便解释一下这道题哈。
抱歉:我只能发100分的帖子。
------解决方案--------------------------------------------------------
1楼说的很对,GC多长时间执行一次在JVM中是可以配置的。
如果你的JDK配置到环境变量中的话,在命令行执行命令 jconsole和 jvisualvm可以进入到JVM监视和管理控制台以及可视化VM中,在可视化VM中的 本地》visualVM》监视 下可以执行垃圾回收操作。你可以直观的看到JVM的运行状态。
------解决方案--------------------------------------------------------