1.垃圾回收
1.1 概述
有些语言不支持垃圾自动回收,需要手动回收,而java是支持自动垃圾回收的,但是垃圾回收不是java语言首创的,垃圾回收关系的问题:那些区域需要回收,什么时候回收,如何回收。java的自动回收经过长时间的发展,已经非常强大了。
1.2 什么样的对象是垃圾
在运行过程中,没有被任何引用指向的对象,被称为垃圾对象。
1.3 为什么需要GC
如果不及时清理这些垃圾对象,会导致内存溢出。在回收时,还可以将内存碎片进行整理。(例如数组必须是连续空间存储)
1.4 内存溢出和内存泄漏
内存溢出:经过垃圾回收后,内存中仍然无法创建新的对象,内存不够用溢出。
内存泄漏:例如IO流没有close。JDBC连接运行结束后没有colse关闭,或是是生命周期很长的对象,一些经常不用的对象,但是垃圾回收器不能判断为垃圾,这些对象就默默的占用着内存,称为内存泄漏,大量的此类对象存在会导致出现内存溢出,也就是导致内存溢出的原因。
1.5 自动内存管理
好处:解放程序员,对内存管理更加合理,自动化。
缺点:对程序员管理内存的能力降低了,解决问题能力变弱了,不能调整垃圾回收的机制。
2.垃圾回收相关算法
2.1 标记阶段
作用:判断对象是否是垃圾对象,是否有引用指向对象。
相关