Java内存回收

来源:互联网 发布:sopcast网络电视直播 编辑:程序博客网 时间:2024/06/05 18:55

可进行回收的内存有


回收之前需要判断内存是否可以被回收,主要有两种算法

(1)引用计数算法(非Java)


(2)根搜索算法(Java)


内存回收算法介绍

(1)标记-清除算法(非Java)

回收前状态


回收后状态


优点:实现简单,其他算法的基础
缺点:效率低;会产生内存碎片

(2)标记-整理算法(非Java)

回收前状态


回收后状态


优点:没有内存碎片,避免了对象存活率高时回收效率低
缺点:实现相对复杂,效率也不高,不仅要标记所有存活对象,还要整理所有存活对象的引用地址。从效率上来说,标记/整理算法要低于复制算法。

(3)复制算法(Java算法)

回收前状态


回收后状态


优点:实现简单,效率高,没有内存碎片
缺点:内存利用率低,对象存活率高时回收效率低

(4)分代收集算法(是对上面几种算法的使用)
新生代(Young):每次垃圾回收都发现有大量对象死去,只有少量对象存活,这样选用复制算法,花很小的成本就可以完成收集。
老年代(Old):对象存活率高、没有额外的空间对他就行分配担保,这是就必须使用“标记-清理”或者“标记-整理”。
方法区或持久代(perm):通常这个区域内存变化不大,但发生不够用时会产生回收动作。有些虚拟机没有这个区域的回收,虚拟机规范中没有强制规定需要实现他的回收。

0 0
原创粉丝点击