JVM相关问题
- 谈谈你对JVM的理解?Java8 虚拟机和之前的变化更新
- 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析
- JVM的常用调优参数有哪些?
- 内存快照如何抓取,怎么分析Dump文件?知道吗?
- 谈谈JVM中,类加载器认识吗?
JVM的学习路线
- JVM的位置
- JVM的体系结果
- 类加载器
- 双亲委派机制
- 沙箱安全机制
- Native
- PC寄存器
- 方法区
- 栈
- 三种JVM
- 新生区、老年区
- 永久区
- GC 常用算法
- JMM
1.JVM的位置
2. JVM体系结构
Java虚拟机类加载机制
虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。
在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的
类加载的过程
类的个生命周期如下图:
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:
什么情况下需要开始类加载过程的第一个阶段:加载?Java虚拟机规范中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。但是对于初始化阶段,虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):
- 遇到new、static、putstatic或invokestatic这4条字节码指令时,如果类没有进行初始化,则需要先触发其初始化。
双亲委派机制
双亲委派模型的工作过程是:
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜搜范围中没有找到所需的类)时,子加载器才会尝试自己去加载。