龙空技术网

java 面试专题一:Java基础第三篇-JVM 结束篇垃圾回收面试问题

IT王班长 170

前言:

此刻朋友们对“java垃圾回收机制面试题”都比较关心,你们都需要分析一些“java垃圾回收机制面试题”的相关文章。那么小编在网络上汇集了一些对于“java垃圾回收机制面试题””的相关内容,希望大家能喜欢,咱们一起来学习一下吧!

垃圾回收主要回收的是堆内存,基于分代的思想:

内存怎么样分配

 对象分配

 优先在Eden区分配。当Eden区没有足够空间分配时, VM发起一次Minor GC, 将

Eden区和其中一块Survivor区内尚存活的对象放入另一块Survivor区域。如Minor

GC时survivor空间不够,对象提前进入老年代,老年代空间不够时进行Full GC;

 大对象直接进入老年代,避免在Eden区和Survivor区之间产生大量的内存复制, 此

外大对象容易导致还有不少空闲内存就提前触发GC以获取足够的连续空间.

 对象晋级

 年龄阈值:VM为每个对象定义了一个对象年龄(Age)计数器, 经第一次Minor GC后

仍然存活, 被移动到Survivor空间中, 并将年龄设为1. 以后对象在Survivor区中每熬

过一次Minor GC年龄就+1. 当增加到一定程度(-XX:MaxTenuringThreshold, 默认

15), 将会晋升到老年代.

 提前晋升: 动态年龄判定;如果在Survivor空间中相同年龄所有对象大小的总和大

于Survivor空间的一半, 年龄大于或等于该年龄的对象就可以直接进入老年代, 而无

须等到晋升年龄.

那些要收回?对象生死判定

 可达性分析算法

通过一系列的称为 GC Roots 的对象作为起点, 然后向下搜索; 搜索所走过的路径

称为引用链/Reference Chain, 当一个对象到 GC Roots 没有任何引用链相连时, 即该对

象不可达, 也就说明此对象是不可用的;

在Java, 可作为GC Roots的对象包括:

1.方法区: 类静态属性引用的对象;

2.方法区: 常量引用的对象;

3.虚拟机栈(本地变量表)中引用的对象.

4.本地方法栈JNI(Native方法)中引用

的对象。

怎么回收?方法论?分代收集

 新生代-标记清除法

该算法分为“标记”和“清除”两个阶段: 首先标记出所有需要回收的对象(可达性

分析), 在标记完成后统一清理掉所有被标记的对象.

怎么回收?方法论?分代收集

 新生代-复制算法

该算法的核心是将可用内存按容量划分为大小相等的两块, 每次只用其中一块, 当

这一块的内存用完, 就将还存活的对象复制到另外一块上面, 然后把已使用过的内存空

间一次清理掉.

怎么回收?方法论?分代收集

 老年代-标记整理算法

该算法分为“标记”和“清除”两个阶段: 首先标记出所有需要回收的对象(可达性

分析), 在标记完成后让所有存活的对象都向一端移动,然后清理掉端边界以外的内存;

实现回收?谁来做?垃圾回收器

JVM垃圾回收面试常见面试题

垃圾回收常用的算法有哪些?特点是什么?

哪几种垃圾收集器,各自的优缺点,

jvm中一次完整的GC流程(从ygc到fgc)是怎样的,

JVM垃圾回收机制,何时触发MinorGC或FullGC等操作

标签: #java垃圾回收机制面试题