java垃圾回收机制

         最近很多人都问到我如何理解java的垃圾回收机制。今天在博客中总结一下。

 

         生活中,我们随处可见的就是垃圾回收站回收垃圾来重新利用,避免环境污染,而且会让通过重新再利用这些垃圾,能够节省能源和资源。

 

        编程是源于生活。在java中,垃圾是会产生的,当然也会被jvm自动回收再利用。当没有对象引用指向原先分配给某个对象的内存,该内存便成为了垃圾,那么jvm会用一个系统级线程来释放这些内存,从而让这块内存空间能够被后来的新对象使用。另外垃圾回收也可以清除内存记录碎片。由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。

 

        在java中垃圾回收机制有好有坏。

 

        垃圾回收能自动释放内存空间,减轻编程的负担。这使Java 虚拟机具有一些优点。首先,它能使编程效率提高。在没有垃圾回收机制的时候,可能要花许多时间来解决一个难懂的存储器问题。在用Java语言编程的时候,靠垃圾回收机制可大大缩短时间。其次是它保护程序的完整性, 垃圾回收是Java语言安全性策略的一个重要部份。

 

        垃圾回收的一个潜在的缺点是它的开销影响程序性能。Java虚拟机必须追踪运行程序中有用的对象,而且最终释放没用的对象。这一个过程需要花费处理器的时间。其次垃圾回收算法的不完备性,早先采用的某些垃圾回收算法就不能保证100%收集到所有的废弃内存。当然随着垃圾回收算法的不断改进以及软硬件运行效率的不断提升,这些问题都可以迎刃而解。

 

         在编程的时候,可能会手动调用gc方法来呼唤垃圾回收机制来处理垃圾等操作,之所以叫呼唤是因为java的垃圾回收机制是以不定时的方式来收集垃圾的,当调用gc的时候虽然不能后让垃圾回收机制立即来回收垃圾等操作,但是它能够让垃圾回收操作容易发生,或提早发生。

 

        在垃圾回收机制中,还有一个方法叫finalize方法是需要了解的。在jvm垃圾回收器收集一个对象之前,一般要求程序调用适当的方法释放资源,但在没有明确释放资源的情况下,Java提供了缺省机制来终止该对象心释放资源,这个方法就是finalize。

 

        其实对于java垃圾回收机制了解到这个程度就够用了,因为在很多时候,java的垃圾回收机制其实是不用编程人员来操心的,也许在某一天你需要操心来处理java的垃圾回收机制的时候,那时候你需要认真研究一下jdk源代码了或者找一些更加深入剖析java的书籍来帮助你了。

 

 

你可能感兴趣的:(J2SE)