Inside the Java Virtual Machine学习笔记6

58 阅读2分钟

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() 方法结束自己。