请加照片说明

JVM在面试中一直是绕不开的坎。所以我们要征服它。本文整理了阿里两面出现的JVM相关面试题,希望对你有帮助。

一、问题

1.JVM内存模型、GC机制和原理;2.GC分为哪两种,Minor GC和Full GC有什么区别?什么时候触发Full GC?分别使用什么算法?3.JVM有几种classloader,为什么有几种?什么是父母任命机制?介绍了一些操作过程,家长委托模式的优点。在什么情况下,我们要破坏父母委托模式?常见的JVM调整方法是什么?哪些参数可以具体调整,哪些值可以调整?7.如何分析JVM虚拟机内存分区、类加载程序、垃圾收集算法、垃圾收集程序、类文件结构

二、答案

1.Q1

问题:JVM内存模型、GC机制和原理。首先看一下内存型号:内存型号

Jdk1.6和更早版本:永久层代、常量池有方法区域Jdk1.7:永久层代,但已逐渐“删除永久层代”。常量池在堆Jdk1.8和之后:无永久层代;常量池在元空间中插入图片说明。

在此插入图片说明

2.Q2

问:GC分为哪两种,Minor GC和Full GC有什么区别?什么时候触发Full GC?分别使用什么算法?

在此插入图片说明

我们先来看看定义。

个体在新生代地区消失的过程,我们认为“Minorgc”个体在旧时代地区消失的过程,我们称之为“Majorgc”Minorgc的整个YouGen的整理过程,Eden的清理,S0S1的整理,都是Minorgo Allocs造成的。

Major GC OldGen区域内存不足,触发Major GC

全GC全GC是清洁整个堆空间,包括年轻一代和永久一代

完全GC触发场景

CONCURRENT-MODE(SYPROMOTIOTION FAILED)分为2 .如果GC线程与用户线程同时运行,则用户线程仍然可以同时生成垃圾,如果这些垃圾更多,无法放入保留空间,则可以生成CMS-Mode-Failure,切换到SerialOld单线程,生成mark-sweep

新生代晋升的平均值很大

小大于老年代的剩余空间 (为了避免新生代晋升到老年代失败) 当使用G1,CMS 时,FullGC发生的时候 是 Serial+SerialOld。 当使用ParalOld时,FullGC发生的时候是 ParallNew +ParallOld.

3.Q3

问题:JVM里的有几种classloader,为什么会有多种?

  1. 启动类加载器:负责加载JRE的核心类库,如jre目标下的rt.jar,c等
  2. 扩展类加载器:负责加载JRE扩展目录ext中JAR类包
  3. 系统类加载器:负责加载ClassPath路径下的类包
  4. 用户自定义加载器:负责加载用户自定义路径下的类包

为什么会有多种?

  1. 分工,各自负责各自的区块
  2. 为了实现委托模型

4.Q4

问题:什么是双亲委派机制?介绍一些运作过程,双亲委派模型的好处;

  如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的 加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载 器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都不愿意干活,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己想办法去完 成,这不就是传说中的双亲委派模式。

在这里插入图片描述

双亲委派的好处: 沙箱安全机制:自己写的S类不会被加载,这样便可以防止核心API库被随意篡改 避免类的重复加载:当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次 。

5.Q5

问题:什么情况下我们需要破坏双亲委派模型? 双亲委托有个弊端:

  • 不能向下委派,不能不委派

怎么打破双亲委派机制:(也就是能向下委派和不委派)

  • 自定义类加载器(不委派)
  • spi机制(向下委派)

打破双亲委派的两种方式:

  1. 通过spi机制,使用ServiceLoader.load去加载
  2. 通过自定义类加载器,继承classloader,重写loadclass方法

6.Q6

问题:常见的JVM调优方法有哪些?可以具体到调整哪个参数,调成什么值?

调优工具 console,jProfile,VisualVM ,Dump线程详细信息:查看线程内部运行情况

死锁检查

查看堆内类、对象信息查看:数量、类型等

线程监控

线程信息监控:系统线程数量。 线程状态监控:各个线程都处在什么样的状态下

热点分析

CPU热点:检查系统哪些方法占用的大量CPU时间 内存热点:检查哪些对象在系统中数量最大(一定时间内存活对象和销毁对象一起统计)

7.Q7

问题:JVM虚拟机内存划分、类加载器、垃圾收集算法、垃圾收集器、class 文件结构是如何解析的

JVM虚拟机内存划分(上面) 类加载器(上面) 垃圾收集算法:标记-清除算法、复制算法、标记-整理算法、分代收集算法 垃圾收集器: Serial收集器、ParNew收集器、Parallel Scavenge收集器、Serial Old收集器、 Parallel Old收集器、CMS收集器、G1收集器、Z垃圾收集器 文件结构:Class文件结构

请添加图片描述

相关推荐