美文网首页
类的加载小结

类的加载小结

作者: 吴小博Toby | 来源:发表于2019-05-04 14:49 被阅读0次

by hzwusibo  20190504

(1)Java的类加载器:

A.  BootStrop:根加载器,负责加载JVM基础核心类库;

B.  Extension:扩展类加载器,从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap;

C.  System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父加载器。

(2)由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。

A.加载:把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。

B.连接:经过加载后的Class对象还不可用,进入连接阶段,此阶段又分为三个步骤:

    a.验证:检查二进制字节码是否正确合格;

    b.准备:给类的类变量分配内存并初始化;

    c.解析:将常量池的符号引用转换为直接引用;

C.初始化:最后一步对类进行初始化,遵循“先父后子”,“先静态后普通”的原则,依次执行初始化语句。

双亲委派

类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的;除了启动类加载器,每个类都有其父类加载器(父子关系由组合(不是继承)来实现);

双亲委派是指每次收到类加载请求时,先将请求委派给父类加载器完成(所有加载请求最终会委派到顶层的Bootstrap ClassLoader加载器中),如果父类加载器无法完成这个加载(该加载器的搜索范围中没有找到对应的类),子类尝试自己加载。

好处

避免同一个类被多次加载;

每个加载器只能加载自己范围内的类;

类加载过程

类加载分为三个步骤:加载,连接,初始化;

加载

根据一个类的全限定名(如cn.edu.hdu.test.HelloWorld.class)来读取此类的二进制字节流到JVM内部;

将字节流所代表的静态存储结构转换为方法区的运行时数据结构(hotspot选择将Class对象存储在方法区中,Java虚拟机规范并没有明确要求一定要存储在方法区或堆区中)

转换为一个与目标类型对应的java.lang.Class对象;

连接

验证

验证阶段主要包括四个检验过程:文件格式验证、元数据验证、字节码验证和符号引用验证;

准备

为类中的所有静态变量分配内存空间,并为其设置一个初始值(由于还没有产生对象,实例变量将不再此操作范围内);

解析

将常量池中所有的符号引用转为直接引用(得到类或者字段、方法在内存中的指针或者偏移量,以便直接调用该方法)。这个阶段可以在初始化之后再执行。

初始化

 在连接的准备阶段,类变量已赋过一次系统要求的初始值,而在初始化阶段,则是根据程序员自己写的逻辑去初始化类变量和其他资源。

相关文章

  • 类的加载小结

    by hzwusibo 20190504 (1)Java的类加载器: A. BootStrop:根加载器,负责加载...

  • 类加载器小结

    最近遇到了一些问题,然后就了解了一些类加载的过程。在学习过程中,发现类加载器在其中起到了很大的作用,今天就把前几天...

  • JVM-双亲委派模型小结

    jvm小结(后续补充) 1、虚拟机的类加载机制 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、...

  • 第一章 类加载过程

    要点 类加载过程 类加载器 一、类加载过程 1.类的加载过程 类的加载 .class文件过程分为:加载---->连...

  • 深入理解jvm类加载机制

    1.什么是类加载? 类加载机制一个很大的体系,包括类加载的时机,类加载器,类加载时机。 1.1类加载过程 加载器加...

  • java基础知识之java类加载器

    1. 什么是类加载器 类加载器就是用来加载类的东西!类加载器也是一个类:ClassLoader 类加载器可以被加载...

  • 《深入理解JVM虚拟机》读书笔记-类加载器&Java模块化系统

    类加载器 一.类加载器 1.1 类与类加载器 类加载器的定义: Java虚拟机设计团队有意把 类加载阶段中 的“ ...

  • JVM类加载入门

    一 类加载顺序 class类加载-->验证-->准备--->解析--->初始化 class类加载:通过类加载器加载...

  • 学习笔记 | JAVA的反射(二)

    利用反射机制动态加载类 、获取类的方法、获取类的属性 编译时刻加载类是静态加载类,运行时加载类是动态加载类 正常创...

  • jvm类加载器详解和如何打破双亲委派机制

    类加载过程: 项目启动的时候,并不是加载项目中的所有类,是在使用的时候加载,类加载器加载类的时候首先加载父类,所以...

网友评论

      本文标题:类的加载小结

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