这里仅总结下JAVA的垃圾回收机制,不对的地方还望朋友们指出。由于本人C/C++没怎么接触过,希望有了解的朋友交流下。
垃圾产生的原因:在java中当没有对象引用指向原先分配给某个对象的内存,该内存便成为了垃圾。
垃圾回收机制原理:jvm会用一个系统级线程来释放原先分配给某个对象的内存,从而让这块内存空间能够被后来的新对象使用。
另外垃圾回收也可以清除内存记录碎片。
由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,内存会出现碎片。
垃圾回收机制优点:
1.自动释放内存空间,减轻编程的负担。
2.使编程效率提高。在没有垃圾回收机制的时候,可能要花许多时间来解决一个难懂的存储器问题,靠垃圾回收机制可大大缩短时间。
3.保护程序的完整性, 是安全性策略的一个重要部份。
4.清除内存记录碎片。(由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,内存会出现碎片)
垃圾回收机制缺点:
1.开销影响程序性能。Java虚拟机必须追踪运行程序中有用的对象,而且最终释放没用的对象。这一个过程需要花费处理器的时间。
2.垃圾回收算法的不完备性,早先采用的某些垃圾回收算法就不能保证100%收集到所有的废弃内存。
另外:在垃圾回收机制中,还有一个方法叫finalize方法。在jvm垃圾回收器收集一个对象之前,一般要求程序调用适当的方法释放资源。但在没有明确释放资源的情况下,Java提供了缺省机制来终止该对象心释放资源,这个方法就是finalize。
其实很多时候,java的垃圾回收机制其实是不用编程人员来操心的,会被jvm自动回收再利用。 |