18.1 类的加载 连接和初始化
系统可能在第一次使用某个类时加载该类,也可能采用预加载机制来加载某个类。本节将会详细介绍类加载、连接和初始化过程中的每个细节。
18.1.1 JVM和类
当调用java
命令运行某个Java
程序时,该命令将会启动一个Java
虚拟机进程,不管该Java
程序有多么复杂,该程序启动了多少个线程,它们都处于该Java
虚拟机进程里。正如前面介绍的,同一个JVM
的所有线程、所有变量都处于同一个进程里,它们都使用该JVM
进程的内存区。
JVM进程终止的情况
- 当系统出现以下几种情况时,
JVM
进程将被终止。 - 程序运行到最后正常结束。
- 程序运行到使用
System.exit()
或Runtime.getRuntime().exit()
代码处结束程序. - 程序执行过程中遇到未捕获的异常或错误而结束
- 程序所在平台强制结束了
JVM
进程。
从上面的介绍可以看出,当Java
程序运行结束时,JVM
进程结束,该进程在内存中的状态将会丢失。下面以类的类变量来说明这个问题。下面程序先定义了一个包含类变量的类。
两次运行Java
程序处于两个不同的JVM
进程中,两个JVM
之间并不会共享数据。