Java千百问_07JVM架构(010)_什么是老生代的标记算法
来源:互联网 发布:win10 sql sever 编辑:程序博客网 时间:2024/05/31 13:15
点击进入_更多_Java千百问
1、什么是老生代的标记算法
了解堆内存看这里:java堆内存是什么样的
了解java垃圾回收看这里:java垃圾回收机制是什么
所谓标记算法(Mark),分为多种,最简单直观的即标记-清除算法(Mark-Sweep)。即将认定为可回收的内存做一个标记,然后统一将被标记的清理,算法图解如下:
算法过程:
1. 先判定对象是否可回收,对其标记。
2. 统一回收(简单地删除对垃圾对象的内存引用)。
标记-清除算法十分简单直观,且容易实现和理解。但是有一个很严重的问题,内存空间碎片化,这显然是不能接收的,所以Java对老生代的垃圾处理采用的是标记-紧凑算法。
2、什么是老生代的标记-紧凑算法
所谓标记-紧凑算法(Mark-Compact),即在标记-清除算法的基础上,增加了碎片整理这一步,算法图解如下:
算法过程:
- 标记:标记可回收对象(垃圾对象)和存活对象。
- 紧凑(也称“整理”):将所有存活对象向内存开始部位移动,称为内存紧凑(相当于碎片整理)。
- 清理剩余内存空间。
可以看出,内存的碎片整理虽然会损失一定的效率,但是大大减少了内存的碎片化程度,更有利于内存的使用和分配。
2 0
- Java千百问_07JVM架构(010)_什么是老生代的标记算法
- Java千百问_07JVM架构(009)_什么是新生代的复制算法
- JVM架构(010)_什么是老生代的标记算法
- Java千百问_07JVM架构(014)_什么是Dump文件
- Java千百问_07JVM架构(018)_如何监控jvm的运行情况
- Java千百问_07JVM架构(003)_内存分配有哪些策略
- Java千百问_07JVM架构(005)_显示内存管理有什么弊端
- Java千百问_07JVM架构(019)_运行时常量池是什么
- Java千百问_07JVM架构(002)_jvm实例的结构是什么样的
- Java千百问_07JVM架构(001)_java内存模型是什么样的
- Java千百问_07JVM架构(004)_jvm是如何管理内存的
- Java千百问_07JVM架构(007)_java堆内存是什么样的
- Java千百问_07JVM架构(006)_java堆和栈有什么区别
- Java千百问_07JVM架构(008)_java垃圾回收机制是什么
- Java千百问_07JVM架构(011)_java垃圾回收都有哪些方式
- Java千百问_07JVM架构(012)_fullGC、minorGC、magorGC有什么区别
- Java千百问_07JVM架构(013)_java什么情况会内存溢出
- Java千百问_07JVM架构(015)_XmnXmsXmxXss有什么区别
- Java动态修改Enum实例
- bzoj 1509 逃学的小孩
- MyISAM转为InnoDB并在ThinkPHP中使用存储过程
- nyoj 1248 海岛争霸 (并查集)
- 全局ProgressDialog---DialogManager
- Java千百问_07JVM架构(010)_什么是老生代的标记算法
- struts2的java.lang.NoSuchMethodException异常处理
- 分数加减法
- 谈谈java中锁
- 29.vim高效使用方法之buffer、window和tab
- leetcode Intersection of Two Arrays II
- 函数指针和回调函数
- LA 4847 binary search tree
- hdu 1710 Binary Tree Traversals