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

豆豆网   技术应用频道   2007年12月28日  【字号: 收藏本文

内容摘要:本篇文章首先简单介绍GC的工作原理之后,然后再对GC的几个关键问题进行深入探讨,最后提出一些Java程序设计建议,从GC角度提高Java程序的性能。

  通常,finalize用于一些不容易控制、并且非常重要资源的释放,例如一些I/O的操作,数据的连接。这些资源的释放对整个应用程序是非常关键的。在这种情况下,程序员应该以通过程序本身管理(包括释放)这些资源为主,以finalize函数释放资源方式为辅,形成一种双保险的管理机制,而不应该仅仅依靠finalize来释放资源。

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

classMyObject{ 
   Testmain;//记录Test对象,在finalize中时用于恢复可达性 
   publicMyObject(Testt) 
   { 
   main=t;//保存Test对象 
   } 
   protectedvoidfinalize() 
   { 
   main.ref=this;//恢复本对象,让本对象可达 
   System.out.println("Thisisfinalize");//用于测试finalize只运行一次 
   } 
   } 
   classTest{ 
   MyObjectref; 
   publicstaticvoidmain(String[]args){ 
   Testtest=newTest(); 
   test.ref=newMyObject(test); 
   test.ref=null;//MyObject对象为不可达对象,finalize将被调用 
   System.gc(); 
   if(test.ref!=null)System.out.println("MyObject还活着"); 
   } 
   }

  运行结果:

  Thisisfinalize 

  MyObject还活着 

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

责编:豆豆技术应用

正在加载评论...