类加载器系统回顾与内容延伸

在之前已经对JVM中涉及到的类加载器的知识点进行了非常详细的学习,但是距离上一次又过去很长一段时间了,人的记忆肯定会有些模糊,所以在学习JVM下一个全新知识点时有必要对之前所学的类加载器进行一个系统性的回顾,启到一个承上起下的作用,不是有古人云嘛:“温故而知新,可以为师矣”,并且通过系统性的回顾会延升出一些未来要学的东东,前方比较枯燥,但是又是为了更加扎实的去学习JVM接下来的新知识做准备的,一定得耐着性子:

类加载:

  • 在Java代码中,类型的加载、连接与初始化都是在程序运行期间完成的。
  • 提供了更大的灵活性,增加了更多的可能性。

对于上面提到的两点在之前的学习中只是一笔带过了,这里稍加解释一下,对于C、C++语言而说有个dll动态链接库,其实它是在程序编译期间就已经把类型之间的关系就已经确定好了,但是在Java当中并非是这样的,在编译期间其类型的关系并没有完全的确定好,只有类型【在内存中的运行模型】被类加载器所加载之后,并且完成了连接与初始化其模型才真正的确立起来,基于这样一个特别Java就给我们提供了灵活性,因为替范并没有规定在类的加载、连接、初始化之后要做什么事情,所以只要满足规范之后的事情咱们就可以自由发挥了,也就是增加了更多的可能性了,比如说:可以从磁盘上加载、从网绺加载、也能从数据库加载。

Java虚拟机与程序的生命周期:

在如下几种情况下,Java虚拟机将结束生命周期:
①、执行了System.exit()方法。
②、程序正常执行结束。
③、程序在执行过程中遇到了异常或错误而异常终止。
④、由于操作系统出现错误而导致Java虚拟机进程终止。

类的加载、连接与初始化【特别重要!!】

  • 加载:查找并加载类的二进制数据。【可以从网络、磁盘、数据库等多方位进行加载】
  • 连接:
    ①、验证:确保被加载的类的正确性。
          那怎么确保被加载类的正确性呢?其实是由字节码的规范所约束,那这个规范是什么呢?期待未来的学习~~
    ②、准备:为类的静态变量分配内存,并将其初始化为默认值
          注意:默认值并非是咱们在代码中给静态变量显示给定的值,比如静态bool类型的变量默认值为false、int或long类型的默认值为0等等。
    ③、解析:把类中的符号引用转换为直接引用
          那什么是"符号引用",什么是"直接引用"呢?期待未来的学习~~
  • 初始化:为类的静态变量赋予正确的初始值
          这个正确的初始值则为咱们在代码中给静态变量赋的值。

下面用图来展示其整个相关的过程:

类的使用与卸载:

  • 使用
  • 卸载

15_20

猜你喜欢

转载自www.cnblogs.com/webor2006/p/9383479.html