Java程序执行过程:Java虚拟机运行并开启一个线程->使用classloader加载class文件到内存->连接->执行
Java虚拟机结束生命周期可能情况
- 执行
System.exit()
方法 - 程序正常执行结束
- 程序在执行过程中遇到错误或异常而异常终止
- 操作系统出现错误而导致Java虚拟机进程终止
类的加载、连接与初始化
45413866_1.jpg
- 加载:将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区的数据结构。
- 连接:
- 验证:确保被加载的类的正确性(符合Java对字节码的规定)
- 准备:为类的静态变量分配内存,并将其初始化为默认值(int是0等)
- 解析:把类的符号引用转换为直接引用
- 初始化:为类的静态变量赋予正确的初始值(用户为其赋的值)
Java对类的使用可以分为两种
- 主动使用
- 被动使用
所有Java虚拟机实现必须在每个类或接口被Java程序“首次主动使用”时才初始化他们
主动使用:
- 创建类的实例
- 访问某个类的或接口的静态变量,或者对该静态变量赋值
- 调用类的静态方法
- 反射
- 初始化一个类的子类
- Java虚拟机启动时被标明为启动类的类