JVM知识点整理1——(垃圾收集器)

1.JVM运行时数据区

2.JVM对象创建步骤

分配内存的两种方式,其中一种有安全隐患,是如何解决的。

TLAB

3.对象的内存布局

4.对象的访问定位

5.堆溢出,栈溢出

6.方法区和运行时常量池溢出

1.6的时候,可以通过String.intern()使方法区溢出。报错信息就是OutOfMemoryError:PermGen space。

1.7及以后,方法区的字符串常量池和静态变量被移到堆中

7.方法区的主要职责是用于存放类的相关信息,如类名,方法修饰符,常量池,字段描述,方法描述,对于这部分区域的溢出,一般都是产生大量的类去填满方法区。

8.判断对象是否回收-可达性分析

9.作为gcroot的对象(虚拟机栈帧中本地变量表,字符串常量池的引用,静态对象,native,常驻异常对象,synchronized持有的对象)

10. 生存和死亡的判断,需要经过两次标记过程

11.垃圾回收算法中的分代收集理论 (弱分代假说和强分代假说,跨代引用假说)

12. 跨代引用,我们需要再新生代建立一个全局的数据结构(记忆集),当发生minorGC时,包含小部分内存被加入到GCROOTs进行扫描。

13.垃圾收集分为 部分收集Partial GC,新生代收集 minorGC 和老年代收集Major Gc 混合收集mixGedGc。整堆收集 FullGc。

14. 标记清除算法,标记复制算法,标记整理算法。

15.移动存活对象,并更新引用这些对象的地方,必须暂停用户程序,这就stop the world。

 16.根节点(一般是全局性的引用和执行上下文(栈帧中的本地变量表))枚举:通过主动中断(设置一个标志位,线程不断沦陷标志位,标志位为真,线程主动挂挂),让所有线程执行到安全点(具有让程序长时间执行的特征,比如方法调用,循环跳转,异常跳转等地方)的时候停顿下来挂起,然后利用oopMap来记录GCroots。

17、卡表(记忆集的一种实现,记录非收集区域指向收集区域的数据结构),就是一个字节数组,每个字节对应内存一块区域(这款内存称为卡页,HotSpot使用的是512字节大小),一个卡页中只要又一个对象存在跨代指针,那么对应卡表数组中的元素就标识为变脏1,只要筛选出没有变脏的元素,就能轻易得到跨代指针,然后把它们加入gcroots。

18. 写屏障,当老年代引用了新生代的对象时候,通过AOP实现写屏障,达到标记卡表变脏。

19. 并发可达性分析,三色理论(黑白灰)

20.并发标记会导致误判对象消失的,需要同时满足下面两个情况:

        1)插入了一条或多条黑色对象到白色对象的新引用。

        2)删除了全部从灰色对象到白色对象的直接引用

21.解决对象消失,破坏这两个情况任意一个就行

        增量更新:当插入了黑色到白色的新引用时,把这些引用关系记录到GCroots

         原始快照:当要删除灰色对象到白色对象引用时,把这些引用关系记录到GCroots

22. CMS 基于增量更新来做并发标记的,G1则是用原始快照实现的。

23.新生代 垃圾收集器,serial(C real) ,parNew Paralell Scavenge(Par rui 雷欧),都是基于标记复制算法

24. 老年代 垃圾收集器 serial old (标记整理),Paralell Old (标记整理), CMS(concurrent mark sweep 标记清除算法)

25.CMS,获取最短回收停顿时间为目标,初始标记-并发标记-重新标记-并发清除。由于CMS是基于标记清除算法的,所以会存在浮动垃圾,而在老年代使用到一定阈值的时候,会触发serial old来进行空间碎片整理。

26.G1, 建立可预测的停顿模型,基于region堆内存布局,虽然页基于分代垃圾收集,g1不再坚持固定的大小以及固定数量的分代区域,region,还有特殊的大的区域Humongous,专门存储大对象,G1大多数行为把humongous作为老年代,在分配大对象时,超过region size一半,会触发major Gc。

27.将region作为最小的回收单元 ,可以避免整个Java堆的全区域垃圾收集,g1会记录region垃圾堆回收的价值(回收获得的空间以及回收所需时间的经验值),在后台维护一个优先队列,根据用户设定的收集停顿时间,来有限回收价值收益最大的region,一般通过minor Gc处理。

28.G1 跨Region引用,把卡表记录在哈希表中,key是region的起始地址。value是集合,记录的是卡表的索引。所以G1对内存要求更高

29. 并发过程,G1通过原始快照算法来实现,region区域预留一部分空间,用于并发过程中,新对象的算法法,每个region设计了两个TAMS(TOP at MAKR pointer)指针,默认这个指针地址之上的对象都是存货的。

30.G1  初始标记(标记GCroot,修改TAMS指针),并发标记,最终标记,筛选回收,除了并发标记,其余三个阶段也是要完全暂停用户线程的,由此可以看出,G1并非一味追求低延迟,而是关注吞吐量。所以,G1可以在不同应用场景中取得关注吞吐量和关注延迟之间最佳平衡。

31.从整体来看,是基于标记整理算法的,而从局部(两个region之间),看上又是基于标记复制算法的。

32.G1相比CMS

        1)都使用卡表来处理跨代指针,而CMS只有一份卡表,而G1每个region都又一份卡表。

        2)垃圾回收算法差异

        3) 虽然都用了写后屏障维护卡表,G1还是使用了写前屏障来跟踪TAMP指针。

        4) 由于写屏障的复杂性,CMS是同步操作,而G1是类似于消息队列,异步操作

33 .zgc垃圾收集器(JDK11)

34. 大对象之间进入老年代,长期存活对象进入老年代

35. jdk5时,jdk6后,只要老年代连续空间大于新生代的连续空间总大小或者历次晋升平均大小,就会进行minorGc,否则FullGC.

36.  空间分配担保,是发生在新生代,并且基于复制算法,在eden区容纳不下对象B所需的大小,会触发一次minorGC,而发现对象A无法存入survivor空间,只好通过空间分配担保机制把新生代对象提前转移到老年代中去。

 37. 什么是空间分配担保,发生在老年代最大可用连续空间小于新生代所有空间,然后继续检查老年代连续最大空间是否大于历次晋升到老年代对象的平均,如果小于,尽管这次minorGc也许会失败,但是会尝试minorGc;如果大于,则引发fullGC。

38.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值