Java垃圾回收机制是Java另外一个技术优势,我们一般写程序一般只是注重对象的初始化,却忽略对象的释放和回收。这里说的释放其实是内存的释放和回收,对象释放只是一种形象的说法,真正释放和回收的是内存!!!
Java垃圾回收释放内存是Java运行系统自己自动完成的,不需要程序员干预,程序员也无法干预,负责回收的是垃圾回收器,它可以在对象不再使用时,释放并回收存储该对象的那块内存。回收机制是一种动态的回收机制,这是一种不定时回收机制,垃圾回收器可能在任意时间启动,进行垃圾回收,并不一定是产生垃圾才启动,这并无规律可循。
值得注意的是只有new出来的对象所占据的内存才有可能被回收,而接口这种不能new出来的对象所占据的内存是不能被回收的!!!
最后Java虚拟机有两种回收策略,一种是复制式回收策略,通过给正在被使用的对象复制出一块内存,再把空闲的那块内存释放掉就可以实现垃圾回收,这种方式比较适合垃圾比较多的情况;另一种是自省式回收策略,通过给正在被使用的对象标记,完成标记后再把所有不再被使用的对象所占据的内存一次性释放掉,一次性释放的时间长短根据垃圾的多少而定,所以这种方式比较适合垃圾比较少的情况。
通常情况是在程序运行时,这两种方式结合使用,当垃圾比较少时,就启动自省式回收策略,当垃圾比较多时,就启动复制式回收策略。