zoukankan      html  css  js  c++  java
  • 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可用的数据,比如对象!



  • 相关阅读:
    电脑设置开机
    python 环境搭建 python-3.4.4
    遍历hashmap 的四种方法
    Java8 使用 stream().map()提取List对象的某一列值及排重
    解决 SpringMVC 非spring管理的工具类使用@Autowired注解注入DAO为null的问题
    CXF之"@XmlType.name 和 @XmlType.namespace 为类分配不同的名称"错误
    java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL
    java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern
    java.lang.IllegalArgumentException: Request header is too large
    ie8 报错:意外地调用了方法或属性访问
  • 原文地址:https://www.cnblogs.com/lyuweigh/p/36e52fac9a5656dca084eedb06b09129.html
Copyright © 2011-2022 走看看