JVM垃圾回收基础知识面试准备

垃圾回收面试问题

1.垃圾回收回收堆内存是怎么分配空间的

分为新生代和老生代,新生代占堆空间的1/3,老生代占堆空间的2/3
而新生代里有分为eden,from,to;eden占8/10,from和to分别占1/10;

2.内存怎么样分配

对象分配
优先在Eden区分配,当Eden区没有足够的空间分配时,Vm就会发起一次Minor GC(Minor:卖呢),将Eden区和其中一块Survivor区内尚存活的对象放入另一块Survivor区域.如果Minor GC时survivor空间不够,对象就会提前进入到老年代.当老年代空间不足的时候就会进行Full GC;
对象晋级
年龄阈值:VM为每个对象定义了一个对象年龄(Age)计数器,经第一次Minor GC后,依然存活的话,就被移动到了Survivor空间中,并且将年龄设置为1,以后对象在Survivor区中每熬过一次Minor GC年龄就会+1.当增加到一定程度后(默认是15),就会晋级到老年代
提前晋升:动态年龄判断,是如果在Survivor空间中相同年龄所有对象的大小的综合大于了Survivor空间的一半,那么年龄大于或者等于该年龄的对象就你可以直接进入到老年代了/

3.那些要收回?

判断机制是使用的可达性算法
通过一系列的被称为GC Roots的对象作为起点,向下一直搜索,搜索走过的路线被称为引用链,当一个对象到GC Roots没有任何的引用链时,则判断此对象不可达,也就是是说明此对象是不可用的.
在Java, 可作为GC Roots的对象包括:
1.方法区:类静态属性引用的对象;
2.方法区:常量引用的对象
3.虚拟机(本地变量表)中引用的对象
4.本地方法栈(native方法)中引用的对象

4.垃圾回收怎么回收?方法论?分代收集

方法一,新生代的标记清除法
该算法分为"标记"和清楚两个阶段
第一个阶段是标记出需要回收的对象
第二个阶段是在标记完成后统一清理掉所有被标记的对象
缺点是什么呢?
缺点很明显,
第一个是效率问题,标记还有清除的过程效率都不是很高.
第二个是空间问题,因为标记清除后会产生大量的不连续的内存碎片,而空间碎片田铎,可能会导致在运行过程中需要分配的较大的对象无法找到足够的连续内存,而不得不提前进行另外一次垃圾收集;
方法二,新生代,复制算法
该算法的核心是将可用内存划分为大小相等的两块,每次只用其中的一半,当这一版用完的时候,就将存活的对象复制到另一块上面,然后将使用过的内存空间清理掉;
优点
不用考虑"标记清除算法的"内存碎片化的问题了
这种特别适合java朝生夕死的对象特点
缺点
内存太过于浪费了
如果在存活率比较高的情况下,就需要多次执行复制操作,效率就会变低了

方法三,老年代-标记整理算法
分为"标记","清除"两个阶段
第一个阶段是首先标记出所有的需要回收的对象
第二个阶段是在标记完成后,让所哟偶存活的对象都向一段(比如向上)移动,然后清除掉边界以外的内存
优点
不会损失"复制算法"所带来的50%的空间,也不会产生"标记清除算法"所带来的空间碎片化问题
缺点
标记整理算法唯一的缺点就是效率不高,不仅标记还要清除加整理.

5.垃圾回收器是什么呢?

共有7种收集器.新生代3种,老年代3种,还有一种跨新生代和老年代的的收集器G1
jdk8和8之前默认的是Parallel Scavenge和Paraller Old的垃圾回收器属于并行的多线程收集器,而现在主流的集器是CMS,在jdk9后默认的垃圾回收器是CMS,它是并发类型收集器,采用的是标记清除算法,是为了尽可能的缩短垃圾收集时,用户现场停止的时间,它主要的缺点还是内存碎片比较多,下需要更多的CPU资源,更大的堆空间.

6.Full GC触发条件:

1.system.gc()
2.老年代内存不足
3.永生代内存不足
4.统计得到的Minor GC晋升.

发布了53 篇原创文章 · 获赞 42 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_42815122/article/details/85941710
今日推荐