七、JVM类加载机制

  根据《深入理解java虚拟机》这本书总结

 

  当我们写完代码,编辑成class文件,然后启动运行的时候,虚拟机会将class文件加载到内存(并不一定是本地的class文件,也可以从网络获取或者通过别的方式),并且经过对class文件中的数据进行校验、解析、初始化等过程,将class文件转化为虚拟机可以直接使用的java类型,整个这个过程可以叫做-类加载机制。

  类加载的整个过程分为以下几部分:

   1加载-2校验-3准备-4解析-5初始化-6使用-7卸载

   个人觉得12345,五个部分就够了,其中234也可以称为连接部分。

  

  一、加载:

    所谓的加载就是加载class文件,分三个步骤

    1、根据类的全限定名获取此class文件的二进制字节流

    2、将class的二进制字节流转为jvm方法区中的数据结构

    3、在内存中创建该类的class对象

  二、校验:

    校验class文件的格式、元数据等等,防止非法侵入或者非法语句

  三、准备:

    1、将类文件中的静态变量分配内存,存储到方法区中

    2、给变量赋予初值(不是代码中设定的值,而是类型的初始值)

  四、解析:

    将类常量池中的符号引用专为直接引用(主要对字段、方法、调用限定等7种)

  五、初始化:

    执行类中定义的java代码

  

  上面就是比较重要的5部分操作,概括了一下,还不是很深入。

  

  关于双亲委派模式:

   说到双亲委派模式,就要说到java的类加载器,一般分为三种:

    1、启动类加载器

    2、扩展类加载器

    3、应用程序类加载器

   双亲委派模式,简单的理解就是,当需要加载一个类的时候,比如3加载器需要加载一个类,3不会自己直接加载,而是先委派自己的上层2加载器去加载,2加载器也不会自己直接加载,会委派1加载器去加载,1加载器加载后,如果没有找到类,则会告诉2,2才会进行加载,如果2找到了,则加载成功,如果2没找到,则告诉1自己也没找到,最后1才会自己去加载。

  总的就是,让自己的上层先加载,上层返回没有加载到的情况才会自己进行加载。

    

posted @ 2017-08-22 23:29  迷路的小朋友  阅读(112)  评论(0编辑  收藏  举报