首先一个程序由我们编写的.java文件开始通过javac编译成二进制文件。此时jvm会将装载进来的二进制文件,解析成能被运行的class对象。
而在类的加载过程中并不是直接将所有的类一次性加载进来的,而是在需要的时候再找到对应的class加载。
. class文件被装载后,会经历链接的阶段,链接又包括检验,检验是否与jvm匹配,然后是为类变量分配内存,同时设置初值。而final定义的类变量在编译的时候就被分配空间了。最后是解析。解析主要是针对常量池中的符号引用转化为具体的直接引用。就是为直接引用直接指向目标。
到初始化阶段才真正开始执行代码。此时设置的初值会覆盖原本的默认值。
最后在没有引用指向该变量的时候被垃圾回收。
这边还要提到类的加载器,有boot,扩张还有class以及父类委托机制。而类的加载过程全由类加载器来完成。













网友评论