这篇文章将为大家详细讲解有关jvm中怎么加载一个类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
第一步:加载,双亲委派:启动类加载器(jre/lib),系统扩展类加载器(ext/lib),应用类加载器(classpath),前者为c++编写,所以系统加载器的parent为空,后面两个类加载器都是通过启动类加载器加载完成后才能使用。加载的过程就是查找字节流,可以通过网络,也可以自己在代码生成,也可以来源一个jar包。另外,同一个类,被不同的类加载器加载,那么他们将不是同一个类,java中通过类加载器和类的名称来界定唯一,所以我们可以在一个应用成存在多个同名的类的不同实现。
第二步:链接:(验证,准备,解析) 验证主要是校验字节码是否符合约束条件,一般在字节码注入的时候关注的比较多。准备:给静态字段分配内存,但是不会初始化,解析主要是为了将符号引用转换为实际引用,可能会触发方法中引用的类的加载。
第三步:初始化,如果赋值的静态变量是基础类型或者字符串并且是final的话,该字段将被标记为常量池字段,另外静态变量的赋值和静态代码块,将被放在一个叫cinit的方法内被执行,为了保证cinit方法只会被执行一次,这个方法会加锁,我们一般实现单例模式的时候为保证线程安全,会利用类的初始化上的锁。 初始化只有在特定条件下才会被触发,例如new 一个对象,反射被调用,静态方法被调用等。
关于jvm中怎么加载一个类就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
JPHP–一款基于JVM的新PHP编译器
JPHP是一款基于Java语言编写的PHP编译器以及新运行时库,支持多线程、unicode字符串(UTF-16)、GUI、Andr...
JVM+Redis+SpringBoot的面试题有哪些
JVM中垃圾回收机制的示例分析
JVM中内存区域与内存溢出的示例分析
JVM参数设置的示例分析
JVM参数设置的示例分析这篇文章主要介绍了JVM参数设置的示例分析...
jconsole监控JVM实例分析
JVM的含义是什么
JVM的含义是什么这篇文章主要介绍“JVM的含义是什么”,在日常操...
哪五大元素组成JVM结构
哪五大元素组成JVM结构这篇文章将为大家详细讲解有关哪五大元素组成...
Uber jvm profiler如何使用
Uberjvmprofiler如何使用这篇文章将为大家详细讲解...
Java JVM常见面试题有哪些
用户名
密码
记住登录状态 忘记密码?
邮箱
确认密码
我已阅读并同意 用户协议