Java 垃圾回收机制

1.如何确定对象是个垃圾?

  引用计数法:实现简单、效率高,但是如何两个对象同时等于null,他们会相互引用,导致他们的引用计数都不为0,永远不会被回收。

  可达性分析法:

2.典型的垃圾收集算法

  标记-清楚算法:最基础的垃圾回收算法,有标记阶段和清除阶段;标记阶段的任务是标记处所有需要被回收的对象,清除阶段的任务是回收被标记对象所占用的空间

    缺点:容易产生内存碎片,碎片太多可能会导致后续过程中需要为大对象分配空间时无法找到足够的空间而提前触发新的一次垃圾收集动作

  复制算法:将可用内存按容量划分为大小相等的两块,每次只使用其中的一块,当一块的内存用完时,就将还存活着的对象复制到另一块上,然后再把已使用的内存空间一次性清理掉,这样就不容易出现内存碎片了。

    缺点:能够使用的内存缩减为原来的一半

  标记-整理算法:标记阶段和标记清除算法一样,标记完后,将存活的对象都向一端移动,然后清理掉端边界意外事件的内存。

  

  分代收集算法:根据对象存活的生命周期将内存划分为若干不同的区域,将堆区划分为老年代和新生代,老年代的特点是每次垃圾收集时只有少量对象需要被回收,而新生代的特点是每次垃圾回收时,都有大量的对象需要被回收;新生代采取复制算法,老年代使用标记-整理算法;在堆区之外还有一个永久代,他用来存储class类、常量、方法描述等,对永久代的回收主要回收两部分内容:废弃常量和无用的类

3.典型的垃圾回收器

  垃圾收集算法是内存回收的理论基础,而垃圾收集器是内存回收的具体实现。

猜你喜欢

转载自www.cnblogs.com/wxnote/p/8974593.html