zoukankan      html  css  js  c++  java
  • JVM-类加载子系统

    类的生命周期

     1.加载

    将.class二进制字节流流从磁盘读到内存中(通过文件的全限定名读取)

    2.连接

      2.1验证:验证字节码文件的正确性

      2.2准备:给类的静态变量分配内存,并赋予默认值(比如 int i = 0)

      2.3解析:类装载器装入类所引用的其它类

    3.初始化

    为静态变量赋予正确的初始值,此阶段才是程序员编写的程序变量赋予真正的初始值,执行静态代码块

    4.使用

    通过执行引擎执行相应类的方法

    5.卸载

    生命周期结束有以下几种情况:1、程序正常执行结束   2、执行中出现异常  3、操作系统出现异常  4、通过执行 system.exit()

    类加载器的种类(主要)

    启动类加载器(Bootstrap ClassLoader):负责加载JRE核心类库,像JRE中的rt.jar等(C/C++);

    扩展类加载器(Extension ClassLoader):负责加载JRE扩展目录ext中的jar包;

    系统类加载器(Application ClassLoader):负责加载ClassPath路径下的类包;

    类加载机制

    1.全盘负责委托机制(比较古老)

    当一个ClassLoader加载一个类时,需要按需加载其它类的时候,那该类也由这个ClassLoader载入,比如一个A类加载是由Application ClassLoader载入,这个A类引用了B类,这时B类也将由Application ClassLoader载入。

    2.双亲委派机制(parent译义为双亲)

     总结:

    1.安全机制:防止用户自定义类篡改核心类库,比如自定义String.class类不会被加载,如果这个String类被加载了那相当于Java的String类被替代了。这是不允许的。

    2.避免类的重复加载:当父类ClassLoader加载了一个类的时候,这个类不需要被其它ClassLoader再次加载。

  • 相关阅读:
    shell脚本之for循环
    shell脚本小集锦
    Java构建指定大小文件
    IntelliJ+Maven+Spring+Tomcat项目搭建(MAC)
    Git下基本命令操作
    Mac下IntelliJ的Git、GitHub配置及使用
    Git下的.DS_Store文件
    Mac下GitHub以及GitHub Desktop使用实战
    idea快捷键
    汉字获取首字符
  • 原文地址:https://www.cnblogs.com/tongxuping/p/11958248.html
Copyright © 2011-2022 走看看