一个被终止的对象常驻内存重而不被使用的话,会占用很多系统资源,于是.net的垃圾回收器就会将它放在中止化队列中,一旦时机成熟,该对象就会被唤醒,并调用他的finalize方法,来彻底的终结他,但是利用这一机制,就可以将耗费资源的巨型类放入到一个对象池中, 在程序的整个生存期内重复的使用他(结束的标志是clr认为在进程中不存在任何该应用程序的根)。我们称这些巨型类为expensive对象,下面来讨论一下管理expensive对象的对象池的结构。 class expensive{
static stack pool = new stack();
public static expensive getobjectfrompool(){
retun (expensive) pool.pop();
}
public static void shutdownthepool(){
pool = null;
}
public expensive(){
//先构造对象
pool.push(this);
}
finalize (){
if(pool!=null){
gc.registerforfinally(this;)//先把他叫醒挨宰
pool.push(this);//将“清醒的”对象加入到对象池中,让他起死回生
}
}
}
class app{
static void main(){
new expensive();
……
expensive e = expensiv. getobjectfrompool();
//下面就可以使用e了
expensive.shutdownthepool();//关闭应用程序前,先关闭对象池,否则会在内存中留下“孔洞”,因为finalize已经被重写了
}
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器