JVM虚拟机——day1
JVM由三个主要子系统构成
- 类加载子系统
- 运行是数据区(内存结构)
- 执行引擎
运行时数据区
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZBjmXbbg-1592394469871)(JVM虚拟机——day1\Image.png)]
jvm架构模型
java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种是基于寄存器的指令集架构
区别
基于栈的架构特点:
设计和实现简单,适用于资源受限的系统,如机顶盒等小型设备
避开类寄存器的分配难题:使用0地址指令方式分配
指令流中的大部分是零地址指令,其指向过程依赖于操作栈。指令集更小,编译更容易实现
不需要硬件的支持,可移植性更好,更好实现跨平台(内存层面)
基于寄存器架构的特点:
典型的应用X86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机
指令集架构完全依赖于硬件,可移植性差
性能优秀,执行更高效
花费更少的指向区完成一项操作
· 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令,二地址指令和三地址指令为主
总结:
跨平台性;指令集小,指令多;性能比寄存器低点
虚拟机生命周期
虚拟机的启动
java虚拟机的启动时通过引导类加载器(bootstrap class loader)创建一个初始类(intitial class)来完成的,这个类是由虚拟机的具体实现来指定的
虚拟机的指向
运行一个java虚拟机有一个清晰的任务:执行Java程序
程序开始执行时它才运行,程序结束时他就停止
执行一个所为的Java程序的时候,真真正正执行的是一个叫做Java虚拟机的进程
虚拟机的退出
以下几种情况:
程序正常执行结束
程序在执行过程中遇到了异常或错误而异常终止
由于操作系统的出现错误导致Java虚拟机进程终止
某线程调用Runtime类或System类exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作
除此之外,JNI (Java Native Interface)规范描述类JNI Invocation API来加载或者卸载 Java虚拟机时,Java虚拟机的退出情况