JAVA虚拟机之类加载器

一.类的加载概述

   类加载的过程:     

 

1. 当程序要加载某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三部来实现对这个类进行初始化.

 

 

 

   加载:当虚拟机需要使用类A.java时,会拿他的字节码文件(.class),并用解析该文件到内存,创建一个对象

 

        官方话:(类加载器负责将.class文件加载到内存中,并生成对象(字节码文件对象))

  

  连接:   

        验证:目的在于确保当前加载的class文件符合虚拟机要求,能被虚拟机使用,并且不会影响虚拟机安全,

            主要包括四种验证方式:

          • 文件格式验证
          • 元数据验证
          • 字节码验证
          • 符号引用验证

 

      准备:为类对象中的静态变量赋值,分配内存,并且设置该类变量的初始值即0(比如static int a = 6

          这里只将a初始化为0)

          这里不会为实例变量分配初始化值,类变量会分配在方法区中,而实例变量会随着对象一起分配到java堆咋中

 

        
 
         解析:将字节码文件变为Java虚拟机可用的对象

     初始化:类加载的最后一步,前面一些没有赋值(普通成员变量),或者值赋值为初始值的变量(如static修饰的),会在这个时候完成赋值;
           
 
    2. 常见的三种加载器:
        • Bootstrap             最顶级的加载器,加载的是最基本的东西,最底层的东西
        • ExtClassLoder         扩展类加载器,加载都都是jdk自己使用的类
        • AppClassLoder         加载程序员写的class文件
       
        当使用某个类是,jvm会把加载该类的.class文件,
    
 
 
    3. 如何获取一个加载器?
        首先要的到一个类的字节码文件(Class文件)对象,使用该对象中的getClassLoader()方法来获取类加载器对象
        ClassLoader getClassLoader();            返回类的加载器
 
 
  4. 类加载器的作用
         ClassLoader cla = Class.getClassLoader();
         这里的Class是一个对象,是你获取到的Class对象,比如:Class clazz = Class.forname("com.db.student");
         然后这里的获取这个对象的类加载器,这个类的作用就是根据一个指定的类的全限定名,找到对应的Class字节码文件,然后加载它转化成一个java.lang.Class类的一个              实例.
 
    5. 它解释比较抽象,在jdk类源文件中是比不可少的,jdk中存在的大多都是class类型的文件,这就要通过加载器来创建这些class文件可以被jvm使用的对象了;
       他的主要作用就是讲二进制文件转换为JVM可用的数据,比如对象!



posted @ 2018-09-22 21:19  觥筹啊觥筹  阅读(241)  评论(0编辑  收藏  举报