博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
垃圾收集算法 面试 笔记
阅读量:2122 次
发布时间:2019-04-30

本文共 813 字,大约阅读时间需要 2 分钟。

面试小结

1、标记-清除算法

标记-清除算法 是一种常见的基础垃圾收集算法,它将垃圾收集分为两个阶段

标记阶段:标记出可以回收的对象

清除阶段:回收被标记的对象所占用的空间

缺点:

1、标记和清除的效率都不算高

2、容易产生大量不连续的内存碎片,碎片太多可能会导致后续没有足够的连续内存分配给较大的对象,从而提前触发新的一次垃圾收集动作

2、复制算法

把内存空间化为两个相等的区域,每次只使用其中一个区域。在垃圾收集时,遍历当前使用的区域,把存活对象复制到另外一个区域中,最后将当前使用的区域的可回收的对象进行回收。

代价:内存为原来的一半

复算法的效率与存活对象的数目多少有很大的关系,如果存活对象很少,复制算法的效率就会很高,适用于生命周期很短的对象

复制算法常用于新生代中

3、标记-压缩算法

标记可回收的对象后将所有存活对象压缩到内存的一端,使他们紧凑地排列在一起,然后对边界以外的内存进行回收,回收后,已用和未用的内存都各自一边。

老年代对象存活率会较高,如果用复制算法,这样会有较多的复制操作,导致效率降低

标记-压缩算法常用于老年代

4、分代收集器算法

分代收集算法会结合不同的收集算法来处理不同的空间

根据生命周期的长短将它们分别放到不同的区域,并在不同的区域采用不同的收集算法,这就是分代的概念

java堆区分类

新生代

Eden 空间    From Survivor空间    To Survivor 空间

由于Eden空间中大都数对象生命周期很短,所以新生代的空间划分并不均分,HotSpot虚拟机默认Eden 空间和两个Survivor 空间的所占的比例为8 : 1

老年代

在这里插入图片描述

有两种情况Eden 空间 和 From Survivor 空间存活的对象不会复制到 To Survivor 空间,而是晋级到老年代

1、存活对象的分代年龄超过所制定的阉值

2、另一种是To Survivor 空间容量达到阉值

转载地址:http://pwfrf.baihongyu.com/

你可能感兴趣的文章
CMake 入门实战
查看>>
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
逆序对的数量(递归+归并思想)
查看>>
数的范围(二分查找上下界)
查看>>
算法导论阅读顺序
查看>>
Windows程序设计:直线绘制
查看>>
linux之CentOS下文件解压方式
查看>>
Django字段的创建并连接MYSQL
查看>>
div标签布局的使用
查看>>
HTML中表格的使用
查看>>
(模板 重要)Tarjan算法解决LCA问题(PAT 1151 LCA in a Binary Tree)
查看>>
(PAT 1154) Vertex Coloring (图的广度优先遍历)
查看>>
(PAT 1115) Counting Nodes in a BST (二叉查找树-统计指定层元素个数)
查看>>
(PAT 1143) Lowest Common Ancestor (二叉查找树的LCA)
查看>>
(PAT 1061) Dating (字符串处理)
查看>>