一、JAVA虚拟机和JAVA程序的生命周期
JAVA虚拟机的生命周期和JAVA程序的生命周期一致,当我们在命令行中敲入java命令运行java程序时,java虚拟机进程启动,程序运行,当程序终止时,则JAVA虚拟机的生命也结束。
二、类的生命周期
1、加载:将.class文件的二进制数据放到内存方法区中,并在堆区中创建一个Class对象,这个Class对象封装了方法区的数据结构,用户能通过Class对象访问到方法区中。
2、连接
(1)验证:验证.class文件是否是通过JAVA程序编译出来的,因为有可能这个.class文件是黑客特意制造出来的。
(2)准备:为类中的静态变量分配空间,并初始化为默认值。
(3)解析:把类的符号引用变为直接引用。
3.初始化:为静态变量和静态块赋予值。
JAVA程序对于类的使用方式:
(1)主动使用。
(2)被动使用。
这里注意:
JAVA虚拟机对于加载和连接的时间节点是很宽松的,没有严格规定,可以提前加载也可以;但是对于初始化,JAVA虚拟机规定当某个类被主动使用时才能初始化。
我们把3个步骤细讲一下:
1、类的加载:类是通过类加载器进行加载。
类加载的来源:
(1)文件系统中的class文件
(2)jar包
(3)网络中下载。
类加载目的地:内存。
类加载器分类:
(1)根类加载器:没有父类,加载java.lang.*。
(2)扩展类加载器:父类是根类加载器,用于加载jre\lib\ext的jar包。
(3)系统类加载器:父类是扩展类加载器,用于加载classpath的jar包。Class scl = Class.getSystemClassLoader();