目录
1、下图展示了JVM的主要结构:
可以看出,JVM主要包括四个部分:
第一部分:类加载器(Class Loader)
第二部分:执行引擎(Execution Engine)
第三部分:运行时数据区(Runtime Data Area,也称内存区),内存区又包含:
(1)方法区(Method Area)
(2)堆(HEAP)
(3)Java虚拟机栈(Java VM Stack)
(4)程序计数器(Program Counter Register,亦简称PC Register)
(5)本地方法栈(Native Method Stack)
第四部分:本地方法接口(Native Interface)
注意点强调:在运行时数据区,方法区和堆是所有Java线程共享的,而Java虚拟机栈、本地方法栈和程序计数器则是每个线程私有的。
2、JVM在什么时候启动的
一:我也没有手动创建,它是如何创建的?
二:JVM在什么时候启动的?
三:JVM在什么时候关闭的?
带着问题我们继续往下看:
再回答问题之前,先看看我们是如何启动Java的。
1.我们在IDEA或者eclipse上面都有启动java程序的图标,如下图
2:直接打开cmd,再通过命令java -jar XXX.jar来启动应用。
下面来分析下到底是如何启动的,见下图
1.编写Java实现类
2.编译成.class文件
3.打包成.jar文件
4. 执行命令,java -jar XXX.jar 来启动程序
5.装载配置,由于我们的电脑上肯定安装了jdk,jdk里面就有jvm.cfg
6. 根据配置寻找jvm.dll,我们安装的jdk上面也有
7.这个时候JVM已经初始化完成,就会加载我们的class文件
8. 找到main方法并且运行起来。
每一个程序运行都遵照上面的过程,回过头来,再看看最初的3个问题。
一:我也没有手动创建,它是如何创建的?-》见上图
二:JVM在什么时候启动的?-》在你运行程序的时候启动
三:JVM在什么时候关闭的?-》当该程序关闭退出,这个虚拟机实例也就随之消亡