java高频面试总结(JVM篇)

2019-09-29  本文已影响0人  吗丁啉要餐前吃

1.讲一下什么是JVM?

答:java Virtual Machine,java虚拟机,是java运行时的环境,用来存储java程序运行时的信息。分为:堆区、栈区、方法区。结构如图:


image.png

2.堆里的分区有哪些,各自的特点是什么?

答:堆分为:新生代和老年代,新生代又分为eden区、frorm survivor和to suvivor。

3.java中垃圾回收的算法都有哪些?

答:
1)标记清除:标记出来要回收的对象,然后统一回收。缺点是(1)效率低,标记和清除效率都低;(2)会产生大量不连续的内存碎片。
2)复制算法:将内存分为相等的两部分,每次使用其中给的一块,当A内存用完时,将还存活的对象复制到B;然后一次性清除A中的内存,再将B的内存复制到A。缺点是内存的代价太高,每次要浪费一半的内存。
3)标记整理:主要是解决标记清除后内存碎片的问题,当对象存活率较高时,也解决了复制算法的效率问题。
4)分代收集:根据对象的声明周期,将堆分为新生代和老年代。新生代中,对象生存期短,每次回收都有大量对象死去,那么就用复制算法。老年代对象存活率高,没有额外的空间进行分配担保,可以使用标记-整理或者标记-清除。

4.java中的垃圾回收器有哪些?

答:1)Serial/Serial Old :最古老的的,单线程,独占式,成熟,适合单CPU服务器。-XX:+UseSerialGC
2)ParNew :和Serial基本没有区别,唯一的区别就是:多线程,多CPU,停顿时间比Serial少。-XX:+UseParNewGC(新生代使用ParNew,老年代使用Serial Old)
3)Parallel Scavenge(ParallerGC)/Parallel Old : 关注吞吐量的垃圾收集器,高吞吐量则可以高效率的利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。
4)Concurrent Mark Sweep(CMS):一种以获取最短回收停顿时间为目标的收集器,基于“标记-清除”算法实现。主要过程为:初始标记(STW很短,仅标记GC Roots能直接关联到的对象)——>并发标记(不需要停顿,从GC Root开始对堆中对象进行可达性分析,找到存活对象)——>重新标记(STW很短,修正并发标记期间用户程序运作导致标记产生变动的记录)——>并发清除(不需要停顿)


image.png

优点:STW时间短
缺点:(1)CPU资源敏感,CPU资源不足时,效率会明显降低。
(2)浮动垃圾:因为清理阶段程序还在运行,肯定会产生一些新的垃圾。
(3)会产生空间碎片:标记清除算法会导致产生不连续的空间碎片。
5)G1垃圾回收器 :G1 把堆划分成多个大小相等的独立区域(Region),新生代和老年代不再物理隔离。算法:标记—整理 (humongous) 和复制回收算法(survivor)。 -XX:+UseG1GC

上一篇 下一篇

猜你喜欢

热点阅读