垃圾收集(Garbage Collection,GC),并不是随着 Java 一起诞生的。GC 的历史比 Java 来得更加久远,早在 1960 年的时候,MIT 的 Lisp 是第一门真正使用内存动态分配和垃圾收集技术的语言。当 Lisp 还在胚胎时期时,人们就在思考 GC 需要完成的三件事情:
哪些内存需要回收?
什么时候回收?
如何回收?
在经过半个世纪的发展后,对于这三个问题的答案越来越清晰,总结成就是:当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些 “自动化” 的技术实施必要的监控和调节。
在 Java 程序编写的过程中,我们可以知道代码的逻辑是怎样的,但是具体的分支只有在运行过程中才能知道。而这部分的内存分配和回收也是动态进行的,垃圾收集器主要关注的就是这部分内存。
那么实际中,一个需要解决的问题就是,如何判断对象是否存活,对于不再存活的对象,进行垃圾回收。
在经过漫长的发展后,目前主要有下面几种算法来进行对象存活判断。
发布于:湖南省