(二)JVM总结之类加载机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36520235/article/details/82223191

类加载机制

(一)类加载机制的过程和类的生命周期:

这里写图片描述
首先类加载分为三个大阶段:

(1)、加载
(2)、连接
1. 验证
2. 准备
3. 解析
(3)、初始化

具体每一步的详情都是干嘛的:

这里写图片描述

用一个例子来理解类是如何进行加载的

public class TestInstance {

    public static TestInstance instance = new TestInstance();
    public static int a;
    public static int b = 0;

    public TestInstance() {
        a++;
        b++;
    }

    public static void main(String[] args) {
        System.out.print(TestInstance.a);
        System.out.println(TestInstance.b);
    }
}

//最后输出的结果是 1、0

分析原因如下:

  • 首先是因为在类的加载顺序中在第二大步的连接中的准备阶段,是没有直接初始化的,而是先进行一个默认的初始化操作就是把所有的变量都先默认为0,并分配空间。
  • 类变量是被 static 修饰的变量,准备阶段为类变量分配内存并设置初始值,使用的是方法区的内存。实例变量不会在这阶段分配内存,它将会在对象实例化时随着对象一起分配在堆中。
  • 显示初始化就是在类里面的定义好的成员变量给直接加载到初始化,而不是在第二大步连接阶段的准备阶段才开始去初始化

猜你喜欢

转载自blog.csdn.net/qq_36520235/article/details/82223191