你了解 JVM 类加载机制吗?

作为有理想有追求的程序员,对于 JVM 的了解和掌握是有必要的。然而在我们工作中一般并不会直接和 JVM 打交道,因此这块内容也显得较为陌生和神秘,像是空中楼阁。本文通过实例讲解的方式而不是泛泛的总结,将使你对 Java 类加载机制有相对深刻的理解和掌握。

以前遇到了一个挺有意思的题目,这可能是一道让许多人都会犯错的题,不瞒各位,我在第一次遇到到这个题目时也做错了,很容易掉进题目的陷阱,有的人可能已经见过,不管怎样一起来看看题目:

class SingleTon {
    private static SingleTon singleTon = new SingleTon();
    public static int count1;
    public static int count2 = 0;

    private SingleTon() {
        count1++;
        count2++;
    }

    public static SingleTon getInstance() {
        return singleTon;
    }
}

public class Test {
    public static void main(String[] args) {
        SingleTon singleTon = SingleTon.getInstance();
        System.out.println("count1=" + singleTon.count1);
        System.out.println("count2=" + singleTon.count2);
    }
}

看完题想想结果会是什么?可能有人会很轻松的回答出答案是 1 和 1,那恭喜你,你成功中了出题人所设下的陷阱,如果不是,那又是为什么呢?大家别急,我们再将其中的几行代码改变顺序如下:

    public static int count1;
    public static int count2 = 0;
    private static SingleTon singleTon = new SingleTon();

结果又不一样了,大家这里稍稍思考一下,为什么?原因就在于加载类时各个成员的加载顺序不同,这里其实涉及到类的加载初始化流程,我们暂且先不具体解释原因,我们来先介绍类的生命周期相关内容,对类的生命周期有了一定了解,理解这道题就很容易了。

本场 Chat 包含以下内容:

  • 类加载相关陷阱面试题
  • 类的生命周期
  • 类加载器机制
  • 类加载器命名空间
  • 线程上下文类加载器与 SPI

本场 Chat 适合有基础编程能力,渴望了解和掌握 Java 类加载相关内容的读者。

原文发布于微信公众号 - GitChat精品课(CSDN_Tech)

原文发表时间:2019-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券