不止面试—jvm类加载面试题详解

面试题

带着问题学习是最高效的,本次我们将尝试回答以下问题:

什么是类的加载?
哪些情况会触发类的加载?
讲一下JVM加载一个类的过程
什么时候会为变量分配内存?
JVM的类加载机制是什么?
双亲委派机制可以打破吗?为什么
答案放在文章的最后,来不及看原理也可以直接跳到最后直接看答案。

深入原理
类的生命周期
类的生命周期相信大家已经耳熟能详,就像下面这样:
不止面试—jvm类加载面试题详解_第1张图片

不过这东西总是背了就忘,忘了又背,就像马什么梅一样,对吧?

其实理解之后,基本上就不会再忘了。

加载
加载主要做三件事:

找到类文件(通过类的全限定名来获取定义此类的二进制字节流)
放入方法区(将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构)
开个入口(生成一个代表此类的java.lang.Class对象,作为访问方法区这些数据结构的入口)
总的来讲,这一步就是通过类加载器把类读入内存。需要注意的是,第三步虽然生成了对象,但并不在堆里,而是在方法区里。

连接
连接分为三步,一般面试都比较喜欢问准备这一步。

校验
顾名思义,检查Class文件的字节流中包含的信息是否符合当前虚拟机的要求。

准备
这一步中将为静态变量和静态常量分配内存,并赋值。

你可能感兴趣的:(java,学习路线,面试,jvm,面试,java,架构,开发语言)