全网最全的JVM面试总结

295 阅读2分钟

JVM相关问题

  • 谈谈你对JVM的理解?Java8 虚拟机和之前的变化更新
  • 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析
  • JVM的常用调优参数有哪些?
  • 内存快照如何抓取,怎么分析Dump文件?知道吗?
  • 谈谈JVM中,类加载器认识吗?

JVM的学习路线

  • JVM的位置
  • JVM的体系结果
  • 类加载器
  • 双亲委派机制
  • 沙箱安全机制
  • Native
  • PC寄存器
  • 方法区
  • 三种JVM
  • 新生区、老年区
  • 永久区
  • GC 常用算法
  • JMM

1.JVM的位置

image.png

2. JVM体系结构

image.png

image.png

Java虚拟机类加载机制

虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。

在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的

类加载的过程

类的个生命周期如下图:

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:

image.png

什么情况下需要开始类加载过程的第一个阶段:加载?Java虚拟机规范中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。但是对于初始化阶段,虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):

  • 遇到new、static、putstatic或invokestatic这4条字节码指令时,如果类没有进行初始化,则需要先触发其初始化。

双亲委派机制

双亲委派模型的工作过程是:

如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜搜范围中没有找到所需的类)时,子加载器才会尝试自己去加载。

image.png

Java 类加载机制(阿里)-何时初始化类