黑马程序员视频库
播妞QQ号:3077485083
传智播客旗下互联网资讯、学习资源免费分享平台
作为一名Java工程师,怎么可以说自己不懂JVM呢,想成为一名优秀的架构师,JVM也是必备的!面试时,更是逃不过JVM。
“类加载”的相关知识作为面试高频问题,你真的了解吗?面试时能顺利回答吗?下面就跟播妞一起来检测一下吧!
· 简述 java 类加载机制?
虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的 java 类型。
· java 类加载需要几个过程?
加载
加载是类加载的第一个过程,在这个阶段,将完成以下三件事情:
1.通过一个类的全限定名获取该类的二进制流。
2.将该二进制流中的静态存储结构转化为方法去运行时数据结构。
3.在内存中生成该类的 Class 对象,作为该类的数据访问入口。
验证
验证的目的是为了确保 Class 文件的字节流中的信息不回危害到虚拟机,在该阶段主要完成以下四钟验证:
1.文件格式验证:验证字节流是否符合 Class 文件的规范,如主次版本号是否在当前虚拟
机范围内,常量池中的常量是否有不被支持的类型.
2.元数据验证:对字节码描述的信息进行语义分析,如这个类是否有父类,是否集成了不被继承的类等。
3.字节码验证:是整个验证过程中最复杂的一个阶段,通过验证数据流和控制流的分析,确定程序语义是否正确,主要针对方法体的验证。如:方法中的类型转换是否正确,跳转指令是否正确等。
4.符号引用验证:这个动作在后面的解析过程中发生,主要是为了确保解析动作能正确执行。
准备
准备阶段是为类的静态变量分配内存并将其初始化为默认值,这些内存都将在方法区中进行分配。准备阶段不分配类中的实例变量的内存,实例变量将会在对象实例化时随着对象一起分配在 Java 堆中。
public static int value=123;//在准备阶段 value 初始值为 0 。在初始化阶段才会变为 123 。
解析
该阶段主要完成符号引用到直接引用的转换动作。解析动作并不一定在初始化动作完成之前,也有可能在初始化之后。
初始化
初始化时类加载的最后一步,前面的类加载过程,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制。到了初始化阶段,才真正开始执行类中定义的 Java 程序代码。
· 类加载器双亲委派模型机制?
当一个类收到了类加载请求时,不会自己先去加载这个类,而是将其委派给父类,由父类去加载,如果此时父类不能加载,反馈给子类,由子类去完成类的加载。
· 什么是类加载器,类加载器有哪些?
实现通过类的全限定名获取该类的二进制字节流的代码块叫做类加载器。
主要有以下四种类加载器:
1.启动类加载器(Bootstrap ClassLoader)用来加载 java 核心类库,无法被 java 程序直接引用。
2.扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
3.系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的,可以通过ClassLoader.getSystemClassLoader()来获取它。
4.用户自定义类加载器,通过继承 java.lang.ClassLoader 类的方式实现。
更多java知识 尽在黑马程序员
【JavaEE 10.0课程】
全线升级 全国开班
不同的地区有着同样优质的课程
立即扫码 了解详情
????????????
END
- 推荐阅读 -
不仅流行,还很赚钱!15k就业不迷茫!
2020-07-06
28岁程序身价过亿,从字节提前“退休”,网友:你到底挣了多少钱?
2020-07-04
我就知道你“在看”