Java Virtual Machine
Java 虚拟机之所以称为“虚拟机”,是因为它是由规范定义的抽象计算机。
- 抽象规范
- 具体实现
- 运行时实例
每个 Java 应用程序都在 Java 虚拟机抽象规范的一些具体实现的运行时实例中运行。
Java 虚拟机的生命周期
当一个 Java 应用程序启动时,一个运行时实例就诞生了。当应用程序完成时,实例会终止。如果您在同一台计算机上同时启动三个 Java 应用程序,使用相同的具体实现,您将获得三个 Java 虚拟机实例。每个 Java 应用程序都在其自己的 Java 虚拟机中运行。
Java 虚拟机实例通过调用某个初始类的 main() 方法开始运行其单独的应用程序。 main() 方法必须是公共的、静态的、返回 void 并接受一个参数:一个字符串数组。任何具有这种 main() 方法的类都可以用作 Java 应用程序的入口。
main()方法被视为应用程序的初始线程的起点,初始线程反过来可以触发其它线程。
在 Java 虚拟机中,线程有两种形式:守护线程和非守护线程。
守护线程通常是虚拟机本身使用的线程,例如执行垃圾回收的线程。但是,应用程序可以将它创建的任何线程标记为守护线程。应用程序的初始线程——从 main() 开始的线程——是一个非守护线程。
只要任何非守护线程仍在运行,Java 应用程序就会继续执行(虚拟机实例继续存在)。当 Java 应用程序的所有非守护线程终止时,虚拟机实例将退出。
如果安全管理器允许,应用程序也可以通过调用 Runtime 或 System 类的 exit() 方法结束自己。