zoukankan      html  css  js  c++  java
  • 七、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才会自己去加载。

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

        

  • 相关阅读:
    深入理解C++的动态绑定和静态绑定
    【转载】“惊群”,看看nginx是怎么解决它的
    352. Data Stream as Disjoint Intervals
    lambda
    auto
    sizeof(类)
    private是自己私有的,protected是可以让孩子知道的,public是公开的
    【转载】C++ typedef用法小结
    string char * const char *之间的互相转换
    【转载】Web Service 的工作原理
  • 原文地址:https://www.cnblogs.com/guoliangxie/p/7414257.html
Copyright © 2011-2022 走看看