日期:2014-05-20  浏览次数:20697 次

JAVA 垃圾回收
请看下面的程序运行的结果,

为什么垃圾回收器会连续回收两个最近的对象(4731hello2,4730hello2)

然后再从最前面回收(hello1)然后又回收两个最近的对象(4729hello2,4728hello2)

然后回收当前最前面的对象(1hello2)
而以后的规律却变成了

1.回收当前最近的对象(4727hello2)

2.回收当前最久的对象(3hello2)

3.重复执行上面1、2两个步骤。


我的系统是winxp       jdk   用的是   1.6.0-beta2

为了能看到了这么多行结果我在Eclipse   中运行了这个程序


是不是所有的垃圾回收都是按这个规律回收的呀,
还是跟本就没有什么规律
我想知道它的工作过程


public   class   test   {      
        static   long   time=1;
        public   test()   {
        }        
        public   static   void   main(String[]   args)   throws   Exception{                
                System.gc();
                hello1   h1=new   hello1();
                h1=null;                          
                for(long   t=0;t <10000;t++){    
       
                            System.out.println(t);  
               
                            hello2   tt=new   hello2();  
                                           
                          if(t <4744)   time=1;//经过多次实验,我的机子会在这附近进行垃圾回收
                          else   time=500;
                        Thread.sleep(time);    
             
                }              
        }
}
class   hello1{
        static   long   count;
        long   con=0;
        hello1(){
        count++;
        con=count;
        }        
        protected   void   finalize(){
                System.out.println( "回收第 "+con+ "hello1 ");
        }        
}
class   hello2{
        static   long   count;
        long   con=0;
        hello2(){
        count++;
        con=count;  
        }
        protected   void   finalize(){
                System.out.println( "回收第 "+con+ "Hello2 ");
        }