垃圾收集的历史十分的久远,在1960年诞生于麻省理工学院的Lisp是第一门开始使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,其作者John McCarthy就思考过垃圾收集器需要完成主要的三件事:
- 哪些内存需要回收?
- 什么时候回收?
- 如何回收?
现如今的内存分配和内存回收技术已经相当成熟,我们去了解垃圾收集和内存分配主要是为了,当需要排查各种内存溢出、内存泄漏的问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们必须对这些“自动化”的技术实施必要的监控和调节。
回到Java上,前面我们已经了解了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而亡。我们不需要担心这几块区域的内存如何回收,当方法结束时,内存自然就跟随着回收了。
而Java堆和方法区两块就存在着不确定性。
接下来我们就一起探索这其中的奥秘吧!!!