优秀的Java程序员必须了解GC的工作原理

来源:java认证发布时间:2012-11-12 12:48:53java认证视频

  下面给出一个例子说明,finalize函数被调用以后,仍然可能是可达的,同时也可说明一个对象的finalize只可能运行一次。

  class MyObject{

  Test main; //记录Test对象,在finalize中时用于恢复可达性

  public MyObject(Test t)

  {

  main=t; //保存Test 对象

  }

  protected void finalize()

  {

  main.ref=this;// 恢复本对象,让本对象可达

  System.out.println(/"This is finalize/");//用于测试finalize只运行一次

  }

  }

  class Test {

  MyObject ref;

  public static void main(String[] args) {

  Test test=new Test();

  test.ref=new MyObject(test);

  test.ref=null; //MyObject对象为不可达对象,finalize将被调用

  System.gc();

  if (test.ref!=null) System.out.println(/"My Object还活着/");

  }

  }

  运行结果:

  This is finalize

  MyObject还活着

  此例子中,需要注意的是虽然MyObject对象在finalize中变成可达对象,但是下次回收时候,finalize却不再被调用,因为finalize函数最多只调用一次。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答