常问的GC相关面试题(二)

点击上方 "JAVA开发大本营"关注, 置顶或星标一起学习

每天晚上10点00分, 我们不见不散

导读

小编将每天整理10道经典,系统化的面试题,让你进行学习。

每日鸡汤

每条路都是孤独的,慢慢的你会相信没有什么事不可原谅,没有什么人会永驻身旁,也许现在的你很累,未来的路还很长,不要忘了当初为何而出发,是什么让你坚持到现在,勿忘初心。

责任编辑:涛哥

常问的GC相关面试题(二)

常问的GC相关面试题(二)

常问的GC相关面试题(一)

十一、4大垃圾回收思想是什么?

参考回答:

(1)引用计数(可能会死循环持有)

(2)复制( 新生代 ,因为对象生命周期短)  

(3)标记清除 

(4)标记整理 (老年代)

十二、新生代满了之后,哪些引用的对象是不能回收的?

参考回答:

JVM中使用了一种GC Root的可达性分析算法,通过对每个对象,都分析一下有谁在引用他,然后一层一层往上去判断,看是否有一个GC Roots。

十三、Java中对象的引用类型有哪些?

参考回答:

(1)强引用:就算OOM也不会对对象进行回收,会造成内存泄漏

(2)软引用:内存足够不进行回收,内存不够的话才进行回收   VM

options:-Xms20M -Xmx20M  

常用于:用HashMap来保存图片的路径 和 相应图片关联的软引用之间的映射关系,避免OOM的问题

(3)弱引用:只要垃圾回收机制一运行,就会进行回收

(4)虚引用:不常用,一般用于监控对象的回收信息

 

十四、什么情况会导致OOM?

参考回答:

(1)深度的方法调用      *Error

(2)堆内存溢出         OutOfMemoryError: Java heap space

(3)清理垃圾,但是很快又填满         GC overhead

(4)nio程序在分配本地内存的时候,本地内存用光了,内存用光之后,当再次分配内存的时候,程序就崩了。

(5)MetaspaceOOM (重复吃Aug年间静态类变量)    

(6)一个应用进程创建了多个线程超出了系统的限制,linux默认1024,可以通过修改其中的linux服务器配置解决。

十五、哪些对象可以作为GC Roots?

参考回答:

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

(2)方法区中的类静态属性引用的对象

(3)方法区中的常量引用的对象

(4)本地方法栈中JNI(Native方法)的引用对象

十六、聊一聊我们为什么要去了解GC和内存分配

参考回答:

在真实工作场景的项目中,时不时的会发生内存溢出、内存泄露的问题,这也是不可避免的Bug,这些潜在的Bug在某些时候会影响到项目的正常运行。

如果你的项目没有合理的进行业务内存分配,将会直接影响到的项目的并发处理。

当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节,而了解了GC实现机制则是我们一切监控和调节的前提。

十七、Java虚拟机将会在什么地方进行垃圾回收?

参考回答:

说起垃圾回收的场所,了解过JVM(Java Virtual Machine Model)内存模型的朋友应该会很清楚,堆是Java虚拟机进行垃圾回收的主要场所,其次要场所是方法区。

十八、从哪几个方面可以评估一个GC的优劣

参考回答:

GC不应该成为影响系统性能的瓶颈,我们在评估 GC收集器的优劣时一般考虑以下几点:

(1)吞吐量

(2)GC开销

(3)暂停时间

(4)GC频率

(5)堆空间

(6)对象生命周期

十九、System.gc 是 Full Gc 吗?

参考回答:

System.gc 其实是做一次full gc操作。这一点可以根据 DisableExplicitGC 的注释说明来看。

注释:Tells whether calling System.gc() does a full GC。

二十、简单说说JVM优化该从什么方面入手(GC方向)

参考回答:

JVM优化,主要是让对象在新生代里分配和回收,尽量不要让太多对象频繁进入老年代,避免频繁的垃圾回收,同时给足系统充足的内存,避免新生代频繁进行垃圾回收。从上述这几个方面进行JVM的优化

常问的GC相关面试题(二)

常问的GC相关面试题(二)

扫码关注最新动态

关键时刻,第一时间送达

常问的GC相关面试题(二)

- END -

点个在看是最大的支持 常问的GC相关面试题(二)