关闭

JVM架构(010)_什么是老生代的标记算法

64人阅读 评论(0) 收藏 举报
分类:

1、什么是老生代的标记算法

了解堆内存看这里:java堆内存是什么样的 
了解java垃圾回收看这里:java垃圾回收机制是什么 
所谓标记算法(Mark),分为多种,最简单直观的即标记-清除算法(Mark-Sweep)。即将认定为可回收的内存做一个标记,然后统一将被标记的清理,算法图解如下:

这里写图片描述

算法过程: 
1. 先判定对象是否可回收,对其标记。 
2. 统一回收(简单地删除对垃圾对象的内存引用)。

标记-清除算法十分简单直观,且容易实现和理解。但是有一个很严重的问题,内存空间碎片化,这显然是不能接收的,所以Java对老生代的垃圾处理采用的是标记-紧凑算法

2、什么是老生代的标记-紧凑算法

所谓标记-紧凑算法(Mark-Compact),即在标记-清除算法的基础上,增加了碎片整理这一步,算法图解如下:

这里写图片描述

算法过程:

  1. 标记:标记可回收对象(垃圾对象)和存活对象。
  2. 紧凑(也称“整理”):将所有存活对象向内存开始部位移动,称为内存紧凑(相当于碎片整理)。
  3. 清理剩余内存空间

可以看出,内存的碎片整理虽然会损失一定的效率,但是大大减少了内存的碎片化程度,更有利于内存的使用和分配

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20527次
    • 积分:509
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:94篇
    • 译文:0篇
    • 评论:0条