2. JVM的架构模型和生命周期

一、前言

Java 编译器输入的指令流是一种基于栈的指令集架构 ,还有另一种指令集架构是基于寄存器的指令集架构。

二、两种架构之前的区别

基于栈的架构特点:

  • 设计和实现更简单,适用于资源受限的系统;
  • 避开了寄存器的分配难题:使用零地址指令方式分配。
  • 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。
  • 不需要硬件支持,可移植性更好,更好实现跨平台。

基于寄存器的架构特点:

  • 典型的应用是x86的二进制指令集:比如传统的 PC,以及 Android 的 Davlik 虚拟机
  • 指令集架构则完全依赖于硬件,可移植性差
  • 性能优秀,执行效率高
  • 花费更少的指令完成一项操作
  • 在大部分情况下,基于寄存器架构的指令集都是以一地址指令,二地址指令,三地址指令为主。

这时候真后悔当初上学时,计算机组成原理这些大课没好好学,都是一些熟悉的名词在耳边绕,但是就是不理解他在讲什么东西。

三、JVM的生命周期

虚拟机的启动

类加载器(bootstrap class loader) 创建初始类(initial class)来完成,这个类由虚拟机的具体实现指定。

虚拟机的执行

  • 执行Java程序
  • 程序开始执行时它才运行,程序结束时他就停止
  • 执行一个Java程序,真正在执行的是一个叫Java虚拟机的进程

虚拟机的退出

  • 程序正常执行结束
  • 程序执行过程中遇到异常或者错误而异常终止
  • 由于操作系统错误导致虚拟机进程终止
  • 某些线程调用 Runtime 类或者 System 类的 exit 方法,或 Runtime 类的 halt 方法,并且 Java 安全管理器也允许这次 exit 或 halt 操作
  • JNI(Java Native Interface)规范描述了用 JNI 来加载或者卸载 Java 虚拟机时,Java 虚拟机退出情况

四、总结

通过上面的一些比较,虽然暂时还不明白底层的实现逻辑,但是先get到一点,因为不同的CPU架构,寄存器的设计是不一样的,所以不能设计为基于寄存器的方式,否则无法兼容。基于栈的方式,规避了寄存器的限制,但是指令集更小,所以完成一个操作需要执行的指令就更多,自然也就导致执行效率相比于寄存器架构低。

相关推荐
龙亘川11 小时前
开箱即用的智慧城市一网统管AI平台—平台简介与核心架构(1、2)
人工智能·架构·智慧城市·一网统管
上海云盾-小余11 小时前
零信任时代:WAF 从边界防护到微隔离的架构跃迁
安全·web安全·网络安全·架构·安全威胁分析·ddos
稚辉君.MCA_P8_Java11 小时前
Gemini永久会员 Hadoop分布式计算框架MapReduce
大数据·hadoop·分布式·架构·mapreduce
绝顶少年12 小时前
高性能短信发送架构:批量合并与延迟发送的设计艺术
架构
稚辉君.MCA_P8_Java12 小时前
Gemini永久会员 深度解析jvm内存结构
jvm·后端·架构
一水鉴天12 小时前
专题讨论 类型理论和范畴理论之间的关系:闭关系/闭类型/闭范畴 与 计算式(ima.copilot)
开发语言·算法·架构
懂AI的老郑12 小时前
Transformer架构在大语言模型中的优化技术:原理、方法与前沿
语言模型·架构·transformer
鹿里噜哩13 小时前
Spring Authorization Server 打造认证中心(三)自定义登录页
后端·架构
程序员Easy哥13 小时前
ID生成器-第二讲:实现一个客户端批量ID生成器?你还在为不了解ID生成器而烦恼吗?本文带你实现一个自定义客户端批量生成ID生成器?
后端·架构
传感器与混合集成电路13 小时前
提升多轴同步精度:DSP+FPGA架构在高端特种装备伺服控制中的应用
嵌入式硬件·fpga开发·架构