栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM相关

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM相关

 GC算法:

GC部分 1、什么是需要被回收的垃圾?

运行程序中没有任何指针指向的对象,就是需要被回收的垃圾。

2、为什么要进行垃圾回收?

计算机内存有限,如果不回收,就会一直占用内存空间,最终导致OOM。

3、早期的垃圾回收机制是什么样的?有什么缺点?

早期垃圾回收:使用者自己手动申请空间,手动释放空间。

缺点一旦忘了释放,会造成内存泄露。

4、java的垃圾回收机制形式?优缺点是什么?

自动内存管理:  优点: 降低内存溢出与内存泄露风险,让程序员更专注于业务逻辑。

                           缺点: 一点出现问题,难以定位与改错。

5、垃圾回收发生的区域是哪里?

垃圾回收发生在堆和方法区。 重点是堆。

频繁发生在年轻代(堆)、较少发生在老年代(堆)、基本不动 元空间(方法区)。

6、垃圾回收过程主要有哪几个阶段?

标记阶段、清除阶段

7、标记阶段,如何判断对象已死?

主要有两种方法:

①、引用计数法:

        定义:对每个对象保存一个计数器属性,如果有其他对象引用了,则+1,引用失效后-1,若   为0,则表示可以回收。

        优点:实现简单、便于识别、判定效率高,回收没有延迟。

        缺点:

                1、计数器也占用空间,增加空间消耗。

                2、每次引用变化,都要计算。增加时间消耗。

                3、无法解决循环引用问题。(根本缺点)

   java没有采用引用计数法,python使用了,python采用手动解除和使用弱引用weakref的方式来应对以上缺点。

②、可达性分析法:

定义:以根节点集合GCRoots为起始点,按照从上至下的方式搜索被根节点集合直接或间接连接的对象,视为可达对象。非可达对象则视为可回收对象。

优点:可以解决循环引用问题

8、GCRoots包括哪几种对象?

①、虚拟机栈中引用的对象

②、本地方法栈Jni中引用的对象

③、方法区类静态属性所引用的对象

④、方法区中常量所引用的对象

⑤、所有被同步锁synchronized持有的对象

⑥、java虚拟机内部的引用

除此之外,根据垃圾回收器及垃圾回收区域的不同,也有一些可能被临时作为GCRoot的对象。

9、GC时 STW (stop the world)的原因?

可达性分析法必须在一个能够保证一致性的快照中进行

10、在GC中对象的三种状态?

可触及、可复活、可回收

11、如何判断对象可回收?(是问题7的进一步细化说法)

一个对象是否可回收要经过两个标记阶段。

1、经过可达性分析法 判断 对象是否可达,若可达,则不可收回。若不可达,标记为 不可达。

2、对不可达对象进行判断,是否重写了finalize()方法,若没有重写,则 标记为可回收。

若重写了 ,则执行,执行后对象可能被复活,则不可回收。若没有被复活,则可回收。

3、finalize()只能被执行一次。若已执行过,则第二次运行到此时直接将对象标记为可回收。

12、垃圾回收的清除阶段有哪些算法?

1、标记-清除算法

2、复制算法

3、标记-压缩算法

13、标记-清除算法

1、算法描述:   ①、标记可达对象   ②、对堆内存进行遍历,清除非可达对象

2、缺点:①、效率不算高   ②、GC时,停止整个应用程序  ③、清理出的内存空间是不连续的,容易产生内存碎片。

详细说下第三个缺点原因:

标记-清除算法的清除并不是真正的清除,而是将可以被清除的对象地址保存在空闲的地址列表中,下次有新对象需要加载时,逐个判断空闲列表中每个垃圾的空间是否够存放,如果够,则存放。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750823.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号