首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
阐述GC算法
[问答题]
请简述一下GC算法
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(33)
分享
纠错
5个回答
添加回答
2
Allen烽
GC算法分成四种:
标记清除算法:首先先标记,然后统一把标记的对象依次清除,缺点是CPU消耗大,极易出现内存碎片,所以一般用于老年代。
复制算法:把内存区域分成俩块,每次只使用其中一块,然后把还存活的对象放在另一块中,清空原先的块,这样的话不会出现内存碎片。新生代常用的。
复制整理:指针碰撞,将使用过的对象移动到内存的一段,不用的放在另一端。
分代收集:根据不同代的区别,使用符合不同代的算法。
简单来说minorGC发生在新生代,频繁而且需要开销小,所以采取复制算法。
老年代:对象相较于新生代gc不频繁且对象少,采取标记清除或者标记整理算法。
发表于 2019-02-26 09:26:41
回复(1)
0
TiAmo_9955
1)引用计数法 Reference Counting:
2)根搜索算法 GC Roots Tracing
3)标记-清除算法 Mark-Sweep:
4)标记整理算法 Mark-Compact:
5)复制算法 Copying
发表于 2019-05-05 09:43:11
回复(0)
0
江畔8670
考察点:JVM 参考回答: ①GC(GarbageCollection 垃圾收集),GC的对象是堆空间和永久区 ②GC算法包含:引用计数法,标记清除,标记压缩,复制算法。 ③引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。 ④标记-清除算法是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。与标记-清除算法相比,复制算法是一种相对高效的回收方法不适用于存活对象较多的场合如老年代将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收。
发表于 2019-05-03 13:40:06
回复(0)
0
柠小哀
(1)引用计数法 Reference Counting: 对象添加一个引用计数器 每过一个引用计数器值就+1 少一个引用就-1 当它的引用变为0时,该对象就不能再被使用 它的实现简单 但是不能解决互相循环引用的问题 (2)根搜索算法 GC Roots Tracing 以一系列叫“GC Roots”的对象为起点开始向下搜索,走过的路径称为引用链(Reference Chain) 当一个对象没有和任何引用链相连时 证明此对象是不可用的 用图论的说法是不可达的 那么它就会被判定为是可回收的对象 (3)标记-清除算法 Mark-Sweep: 分为标记和清除两个阶段:先把所有活动的对象标记出来 然后把没有被标记的对象统一清除掉 但是它有两个问题 一是效率问题 两个过程的效率都不高 二是空间问题 清除之后会产生大量不连续的内存 (4)标记整理算法 Mark-Compact: 标记整理算法适用于存活对象较多的场合 它的标记阶段和标记-清除算法中的一样 整理阶段是将所有存活的对象压缩到内存的一端 之后清理边界外所有的空间 它的效率也不高 (5)复制算法 Copying
发表于 2019-04-30 23:51:58
回复(0)
0
猎码
引用计数法和引用可达
发表于 2019-02-24 10:06:22
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
Java工程师
上传者:
小小
难度:
5条回答
33收藏
2672浏览
热门推荐
相关试题
能正确表示逻辑式“a≥10或a≤0...
C++
C语言
评论
(3)
小美的梯子
美团
贪心
基础数学
评论
(1)
有如下 Java 代码: clas...
Java
评论
(2)
来自
2024年秋招-蚂蚁集团...
某工厂需要将7200个产品从甲仓库...
数学运算
评论
(2)
大模型在few-shot学习中表现...
大模型概念
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题