吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3858|回复: 16
收起左侧

[Java 转载] Java虚拟机(五)

[复制链接]
NullPointer 发表于 2016-12-20 14:19
垃圾收集算法
一、标记-清除算法
1.1、解释:“标记-清除”(Mark-Sweep)算法是最基本的算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,之所以说他是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进而得到的。
1.2、不足:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。
1.3、执行过程如图:
QQ图片20161220132956.png


二、复制算法
1.1、解释:为了解决效率问题,“复制”(Copying)的收集算法出现了,他将可用内存按照容量划分为大小相等的两块,每次只使用其中一块。当这一块内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要移动堆顶指针,按顺序分配内存即可,实现简单,运行高效。
1.2、不足:这种算法的代价是将内存缩小为了原来的一半,未免太高了一点。
1.3、执行过程图:
1.png
现在的商业虚拟机都采用这种收集算法来回收新生代。
三、标记-整理算法
1.1、再谈复制收集算法:复制收集算法在对象存活率较高时就要进行较多的复制操作,效率将变低。更关键的是,若不想浪费50%空间,就需要有额外的空间进行分配担保,以应对被使用的内存中所有对象都100%存活的极端情况,所以在老年代一般不能直接选用这种算法。
1.2、解释:根据老年代的特点,有人提出了另一种“标记-整理”(Mark-Compact)算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。1.3、执行过程图:
2.png
四、分代收集算法
1.1、解释:当前商业虚拟机的垃圾收集都采用“分代收集”(Generational Collection)算法,这种算法并没有什么新思想,只是根据对象存活周期的不同将内存划分为几块。一般是把java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法,在新生代中,每次垃圾收集都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集,而老年代中因为对象存活率高、没有额外空间对他进行分配担保,就必须使用“标记-清理”或者“标记-整理”算法来进行回收。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| NullPointer 发表于 2016-12-20 15:41
wqh171941 发表于 2016-12-20 15:29
骚年,你复制的很专业'

在哪里可以复制得到?告诉我,我去看看。本人完全是正在看深入理解java虚拟机这本书,然后来自己总结的。谢谢
 楼主| NullPointer 发表于 2016-12-20 15:21
vr4u 发表于 2016-12-20 14:43
学java的时候,老师和我们说的最爽的一句话就是,java有自己的垃圾回收机制,你们甭操心了

是的,但是了解下底层,还是很有帮助的
vr4u 发表于 2016-12-20 14:43
学java的时候,老师和我们说的最爽的一句话就是,java有自己的垃圾回收机制,你们甭操心了
Unreal.E.Age 发表于 2016-12-20 14:59
那我怎么换 垃圾回收器的算法呢
wqh171941 发表于 2016-12-20 15:29
骚年,你复制的很专业'
荼炀 发表于 2016-12-20 15:46
java系统的? 小白别笑话
 楼主| NullPointer 发表于 2016-12-20 15:48
荼炀 发表于 2016-12-20 15:46
java系统的? 小白别笑话

嗯,java虚拟机。讲解的是支持你java运行的环境底层的解释。
wqh171941 发表于 2016-12-20 16:27
NullPointer 发表于 2016-12-20 15:41
在哪里可以复制得到?告诉我,我去看看。本人完全是正在看深入理解java虚拟机这本书,然后来自己总结的。 ...

书上;xxooxxoo
 楼主| NullPointer 发表于 2016-12-20 16:30

书上怎么复制?是将书上自认为重点的语句手敲下来的,省却了废话
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-2 05:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表