JVM之类加载

Posted 雪浪snowWave

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM之类加载相关的知识,希望对你有一定的参考价值。

类加载:将Class文件中的数据加载到内存,对数据校验,转化解析,初始化,最终形成可被虚拟机直接使用的Java类型

 

生命周期:加载-----验证------准备------解析----初始化------使用------卸载

 

类加载的过程包括了加载、验证、准备、解析、初始化五个阶段,解析阶段执行顺序不确定,可以在初始化阶段之后开始(支持动态绑定),这几个阶段按顺序开始,而不是进行或者完成,通常是交叉混合进行的,

 

加载:类加载器:   启动类加载器:Bootstrap ClassLoader,c++实现

          加载存放在JDK\jre\lib下无法被Java程序直接引用

         扩展类加载器:Extension ClassLoader:加载Java平台中拓展功能的Jar包,

            可以直接使用扩展类加载器

         应用程序类加载器:加载用户类路径(ClassPath)所指定的类,

      开发者可以直接使用该类加载器,一般情况下这个就是程序中默认的类加载器

                                         技术分享

双亲委派模型:当一个类收到类加载请求,将请求委派给父类加载器完成,每一层都是如此,最终所有加载请求传到最顶层的启动类加载器,当父类无法完成加载,交给子类加载,要加载类先检查是否已经加载,是不是自己应该加载的类。

好处:就是Java类随着它的类加载器(说白了,就是它所在的目录)一起具备了一种带有优先级的层次关系,保证了某个类在各种类加载器中都是同一个类,只被加载一次

 

 

验证:确保Class文件中的字节流包含的信息符合当前虚拟机的要求,包括文件格式,元数据,字节码,符号引用的验证

准备:正式为类变量分配内存并设置类变量初始值的阶段

解析:虚拟机将常量池中的符号引用转化为直接引用的过程

初始化:真正开始执行类中定义的Java程序代码

 

分派:静态分派:依赖静态类型来定位方法执行版本的分派动作,都称为静态分派 如方法重载

   动态分派:在运行期根据实际类型确定方法的指向版本 如方法重写

   单分派:方法的接收者和参数统称为方法字量,根据一个字量对目标方法选择

   多分派:根据多个字量对目标方法选择

Java是静多动单的语言

 

以上是关于JVM之类加载的主要内容,如果未能解决你的问题,请参考以下文章

JVM进阶之类加载器详解

JVM之类加载classLoader

深入JVM系列之类加载类加载器双亲委派机制与常见问题

JVM系列之类加载

JVM系列之类加载机制(从类文件到虚拟机)

JVM系列之类加载机制(从类文件到虚拟机)