java类的延迟初始化及其特性

jvm通过classLoader来加在编译生成class文件。来生成可操作的java类视图。

但是java并不是在一开始的时候就将会将程序中所有的class文件都加载起来。而是在需要的时候可以动态加载,这给java带来了更多的灵活性。像从网络的下载的class文件可以在程序运行的过程中动态的加载,或者运行时的安全的类型转换。这是c++这种静态编译语言所无法实现的。

当然动态加载也有其缺点,比如慢启动,运行的过程中对class文件的加载编译拖慢了整个程序的运行速度(相当于把部分编译时的工作转移到运行时来做这就是所谓的动态编译即 java jit),所以在程序运行一段时间后才能完全展示其性能。

下面的情况会触发class的load过程:

初始化一个类,包括执行这个类的静态初始化和初始化在这个类中声明的静态字段。根据java语言规范,在首次发生下列任意一种情况时,一个类或接口类型T将被立即初始化:

  • T是一个类,而且一个T类型的实例被创建;
  • T是一个类,且T中声明的一个静态方法被调用(初始化函数虽然未声明,但确实是一个静态函数,参自-java编程思想14章 类型信息);
  • T中声明的一个静态字段被赋值;
  • T中声明的一个静态字段被使用,而且这个字段不是一个常量字段;
  • T是一个顶级类(top level class,见java语言规范的§7.6),而且一个断言语句嵌套在T内部被执行。

未完.....待续
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值