标签:进制 col 而不是 解析 完成 实例变量 ima 运行 color
在java中,类的声明周期总共分为以下几种: 加载(Loading),验证(Verification),准备(Preparation),解析(Analysis),
初始化(Initialization),使用(Using),卸载(Unloading)。其中,验证,准备,解析统称为连接(Linking)如图
在加载阶段,JVM需要完成以下准备:
通过一个类的全限定名来获取定义此类的二进制字节流(并非要从class文件获取,也可从jar或war中读取,也可以在运行时动态生成,还可以编译jsp时获取)
验证是为了确保class文件中的字节流包含的信息符合JVM的要求,并且不会危害JVM自身的安全,验证大致分为四中方法:
PS: 验证阶段是很重要的,但不是必须的,如果所引用的类已经经过了反复校验,可以使用 -Xverifynone参数来关闭一些验证措施,
用来缩短JVM加载时间
准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。
这里进行的内存分配仅包含类变量(被static修饰的变量),不包含实例变量(区别见末尾)。
初始值例: public static int value = 123;
如上声明的话value的值会在准备阶段后为0而不是123。因为此时尚未执行任何java方法,value被赋值123是程序被编译后存放于
类构造器<client>中。但是还有一种特殊情况:
初始值例:public static final int value = 123;
这时在准备阶段后会为value生成ConstantValue属性,赋值为123而非0。
类变量(静态变量):
实例变量:
未完待续
标签:进制 col 而不是 解析 完成 实例变量 ima 运行 color
原文地址:https://www.cnblogs.com/zhuangfei/p/9962803.html