美文网首页jvm
JVM类加载机制学习

JVM类加载机制学习

作者: 最美的风景 | 来源:发表于2019-12-17 21:54 被阅读0次

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型,就是虚拟机的类加载机制。

类加载的过程


下面就分析一下这几个过程。

1、加载

”加载“是”类加机制”的第一个过程,在加载阶段,虚拟机主要完成三件事:

(1)通过一个类的全限定名来获取其定义的二进制字节流

(2)将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构

(3)在堆中生成一个代表这个类的Class对象,作为方法区中这些数据的访问入口。

2、连接

2.1、验证

验证的主要作用就是确保被加载的类的正确性,主要是完成以下四个阶段的验证:

(1)文件格式的验证:验证.class文件字节流是否符合class文件的格式的规范,并且能够被当前版本的虚拟机处理。

(2)元数据验证:主要是对字节码描述的信息进行语义分析,以保证其描述的信息符合java语言规范的要求,比如说验证这个类是不是有父类,类中的字段方法是不是和父类冲突等等。

(3)字节码验证:这是整个验证过程最复杂的阶段,主要是确定程序语义是合法的、符合逻辑的。在元数据验证阶段对数据类型做出验证后,这个阶段主要对类的方法做出分析,保证类的方法在运行时不会出现危害虚拟机安全的事。

(4)符号引用验证:它是验证的最后一个阶段,发生在虚拟机将符号引用转化为直接引用的时候。主要是对类自身以外的信息进行校验。目的是确保解析动作能够完成。

2.2、准备

准备阶段主要为类变量分配内存并设置初始值。这些内存都在方法区分配。在这个阶段我们只需要注意两点就好了,也就是类变量和初始值两个关键词:

(1)类变量(static)会分配内存,但是实例变量不会,实例变量主要随着对象的实例化一块分配到java堆中,

(2)这里的初始值指的是数据类型默认值,而不是代码中被显示赋予的值。比如
public static int value = 1;
在这里准备阶段过后的value值为0,而不是1。赋值为1的动作在初始化阶段。

2.3、解析

解析阶段主要是虚拟机将常量池中的符号引用转化为直接引用的过程。什么是符号应用和直接引用呢?

符号引用:以一组符号来描述所引用的目标,可以是任何形式的字面量,只要能无歧义的定位到目标就好,就好比在班级中,老师可以用张三来代表你,也可以用你的学号来代表你,但无论任何方式这些都只是一个代号(符号),这个代号指向你(符号引用)。

直接引用:直接引用是可以指向目标的指针、相对偏移量或者是一个能直接或间接定位到目标的句柄。

解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。

3、初始化

这是类加载机制的最后一步,在这个阶段,为类的静态变量赋予正确的初始值,上述的准备阶段为静态变量赋予的是虚拟机默认的初始值,此处赋予的才是程序编写者为变量分配的真正的初始值,执行静态代码块。

类的加载机制

1、全盘负责委托机制
当一个ClassLoader加载一个类的时候,默认委托使用加载了该类调用者的ClassLoader来加载,除非显式的使用另一个ClassLoader,否则该类所依赖和引用的类也由这个ClassLoader加载。
2、双亲委派机制
指先委托父类加载器寻找目标类,在找不到的情况下在自己的路径中查找并载入目标类
双亲委派机制的优势:
(1)、沙箱安全机制:比如自己写的String.class类不会被加载,这样可以防止核心库被随意篡改;
(2)、避免类的重复加载:当父类ClassLoader已经加载了该类的时候,就不需要子类ClassLoader再加载一次。

相关文章

  • JVM——类加载机制

    前言 今天就来介绍类的加载机制以及双亲委派机制。 JVM 类加载机制 JVM 类加载的五个阶段 JVM 类加载机制...

  • JVM类加载学习二-类加载机制学习

    JVM类加载机制 @(Java)[JVM|类文件结构] [TOC] 基本介绍 JVM的类加载机制:JVM把描述类的...

  • JVM类加载机制

    这节主要从覆盖JDK的类开始学习JVM的类加载机制。Java和JVM的类加载机制类似,但JVM的类加过程稍有些复杂...

  • JVM——类加载机制

    JVM类加载机制 JVM类加载机制是通过类加载器ClassLoader来将.class文件加载到内存中,以便调用....

  • 类加载机制(一)

    加载机制系列类加载机制(一)类加载机制(二)类加载机制(三) 类加载机制 1.JVM把class文件加载到内存,对...

  • java类加载机制、类加载器、自定义类加载器

    java类加载机制、类加载器、自定义类加载器 类加载机制 java类从被加载到JVM到卸载出JVM,整个生命周期包...

  • Java——JVM篇——收藏系列来啦(终结篇)

    转自:Java——JVM篇——收藏系列来啦(终结篇)侵删。 2.9.JVM 类加载机制 JVM 类加载机制分为五个...

  • 类加载机制

    类加载机制 类加载机制是指 .class文件加载到JVM,并形成Class对象的机制。 类加载机制可以在运行时动态...

  • 2020最新JAVA核心面试知识整理283页(带详解)

    部分目录预览 部分内容预览 JVM 类加载机制 JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下...

  • JAVA类加载机制

    jvm之java类加载机制和类加载器(ClassLoader)的详解java类加载机制:全盘负责、双亲委派、缓存机...

网友评论

    本文标题:JVM类加载机制学习

    本文链接:https://www.haomeiwen.com/subject/rjbenctx.html