在深入了解JVM之前,必须先把一些概念搞清楚以免在学习理解时出现偏差和困扰。
*JVM有自己的规范,设计者抽象出JVM的体系结构并加以规范的定义,而实现者必须遵从这些规范来完成JVM的具体实现。有很多种JVM的实现,这里不展开了。
*我们常说的JVM是指一种具体的JVM实现,比如自己的一台机器安装了一个JVM环境,就是一个具体的实现。
*Java虚拟机实例。一定要明白这个概念,在运行时,JVM实际上是一个个的实例在执行。当由一个程序的入口“如main函数”开始执行java程序时,一个JVM实例就启动了。后续由这个入口展开的千千万万个调用,都由这个JVM实例负责执行。 如果在同一个机器上同时启动五个程序,那就会创建出五个JVM实例。
我们讨论JVM生命期,也是讨论JVM实例的生命期:
- 我们在命令行方式运行java程序:java ClassName args…
实际上是执行ClassName的main函数并传递args…(或args[])数组。这个命令就是JAVA程序的起点,JVM实例由此创建。 - JVM实例创建后出,执行ClassName的线程我们称之为非守护线程。同时JVM还会创建自己的守护线程,负责垃圾收集等工作。
- 当非守护线程彻底结束后,JVM实例将会终止退出。我们在程序中使用System.exit()等手段也可以使JVM实例退出。