2、类加载器深入解析与阶段分析

简介:
  1)在java代码中,【类型】的加载、连接与初始化过程都是在程序【运行期间】完成的
    类型:如我们定义的类、接口、枚举,并不涉及到对象的概念;
    加载:将已经编译好的class字节码文件从磁盘中加载到内存里面;
    连接:将类与类之间的关系确定好,对于字节码的处理在加载连接阶段完成;类与类之间的调用关系也是在这个阶段完成的
    初始化:对于类型中的一些静态变量进行赋值是在初始化过程完成的
  2)提供了更大的灵活性,增加了更多的可能性


2.1、类加载器
  可以理解为加载类的一个工具

2.2、java类的生命周期

java类生命周期包括5个部分,分别是类的加载、连接、初始化、使用和卸载
1)加载:
  查找并加载类的二进制数据,将class字节码文件从磁盘加载到内存里面
2)连接:
  -验证:确保被加载类的正确性
  -准备:为类的【静态变量】分配内存,并将其初始化为【默认值】,这个阶段对象还没有创建
    准备阶段举例demo:

class Test{
  //在准备阶段jvm会给静态变量a分配内存,并给int类型的变量a赋予一个默认值0;
public static int a = 1; }

  -解析:把类中的符号引用转换为直接引用
    符号引用:间接的引用方式,如类中的一个方法引用了另一个类
    直接引用:直接将方法通过指针的方式指向目标对象在内存中的位置
3)初始化:
  为类的静态变量赋予正确的初始值

class Test{
  //初始化阶段才会将1赋值给变量a
public static int a = 1; }

4)使用:
  程序正常使用这个类,如创建对象,调用方法,这是和程序员打交道最多的地方
5)卸载:
  class字节码文件在加载到内存里面之后,形成自己的数据结构,并驻留在内存中,最终从内存中销毁就叫做类的卸载。


java虚拟机结束生命周期的几种情况
  执行System.exit()方法
  程序正常执行结束
  程序在执行过程中遇到了异常或错误而异常终止
  由于操作系统出现错误而导致java虚拟机进程终止

猜你喜欢

转载自www.cnblogs.com/sunhao1234/p/12327238.html