JVM 的架构模型

Java 编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构

具体来说,这两种架构之间的区别:

  • 基于栈式架构的特点:

    • 设计和实现更简单,适用于资源受限的系统
    • 避开了寄存器的分配难题:使用零地址指令方式分配
    • 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器实现更容易
    • 不需要硬件支持,可移植性更好,更好实现跨平台
  • 基于寄存器架构的特点:
    • 典型的应用是 X86 的二进制指令集:比如传统的 PC 以及 Android 的 Davlik 虚拟机
    • 指令集架构则完全依赖硬件,可移植性差
    • 性能优秀和执行更高效
    • 花费更少的指令去完成一项操作
    • 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令、三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主

由于跨平台的设计,Java 的指令都是根据栈来设计的。不同平台的 CPU 架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

JVM 的生命周期

虚拟机的启动

Java 虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。

虚拟机的执行

  • 一个运行中的 Java 虚拟机有着一个清晰的任务:执行 Java 程序
  • 程序开始执行时它才运行,程序结束的时候它就停止
  • 执行一个所谓的 Java 程序的时候,真正在执行的是一个叫做 Java 虚拟机的进程

虚拟机的退出

虚拟机的退出有如下几种情况:

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

JVM 学习一:JVM 的构架模型及生命周期相关推荐

  1. ASP.NET的网页代码模型及生命周期

    第4章  ASP.NET的网页代码模型及生命周期 从本章开始,就进入了ASP.NET应用程序开发的世界.在了解了C#的结构,以及面向对象的概念后,就可以从面向对象的思想开发ASP.NET应用程序.在A ...

  2. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  3. 【Monica的android学习之路】四大组件的生命周期

    [Monica的android学习之路]四大组件的生命周期 1. Service 1.1 启动service 1.1.1 startService 1.1.2 bindService 1.2 死亡回调 ...

  4. JVM学习笔记② JVM运行时数据区域

    JVM所管理的内存将会包括以下几个运行时数据区域: 方法区(Method Area) 方法区是各个线程共享的区域,存放类信息.常量.静态变量.即时编译器编译后的代码等数据.虽然Java虚拟机规范把方法 ...

  5. 机器学习模型的生命周期

    动动发财的小手,点个赞吧! 您的模型如何变化?Source[1] 诞生 当我们构建.训练.拟合或估计我们的模型时,这些数字工具就诞生了.这个阶段几乎从拥有分析目标.数据.计算机.算法以及数据科学家现在 ...

  6. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(6):Spring IOC容器学习(概念、作用、Bean生命周期)...

    一.IOC控制反转概念 控制反转(IOC)是一种通过描述(在Java中可以是XML或者是注解)并通过第三方去生产或获取特定对象的方式. 主动创建模式,责任在于开发者,而在被动模式下,责任归于Ioc容器 ...

  7. 【JVM学习04】JMM内存模型

    文章目录 1. 原子性 1.1 原子性 1.2 问题分析 1.3 解决方法 2. 可见性 2.1 退不出的循环 2.2 解决方法 2.3 可见性 3. 有序性 3.1 诡异的结果 3.2 解决方法 3 ...

  8. JVM学习:JVM对象分代晋升机制

    参考<深入理解java虚拟机>一书,以下均为在HotSpot虚拟机,Serial与Serial Old垃圾收集器中的情况. 1.对象优先分配在Eden区.长期存活的对象将进入老年代 在创建 ...

  9. 【笔记】【一文搞定】java - 多线程:内存模型、生命周期、方法/关键词、并发问题、线程池、案例

    参考: Java内存模型(JMM)详解 - https://zhuanlan.zhihu.com/p/518758482 线程安全性详解(原子性.可见性.有序性) - https://blog.csd ...

最新文章

  1. Jmeter性能测试之while控制器的使用
  2. python split(), os.path.split()和os.path.splitext()函数的区别
  3. windows批量创建域用户
  4. centos下搭建nginx+tomcat实现集群负载与session复制
  5. 又到了年终总结的时候了,数据分析的年度工作计划,你知道该怎么写吗?
  6. 利用设计模式替代项目中的if else(转)
  7. POJ 1128 Frame Stacking 拓扑排序+暴搜
  8. Linux动态库soname的使用(转载)
  9. 《Redis开发与运维》学习第五章
  10. 计算机硬件现状及发展,计算机硬件的发展历史以及计算机的现状和发展趋势
  11. 10倍性能提升!英伟达新卡皇降临,图灵架构GTX 20系列发布
  12. 黑苹果hidp显示不清楚_bigsur 黑苹果开启HIDPI失败解决方法
  13. C++通信录管理系统
  14. 这可能是最简单,精炼,有效的magisk 安装教程,附boot.img 提取方法
  15. 「可视化搭建系统」——从设计到架构,探索前端领域技术和业务价值
  16. java飞机英雄大战代码ppt_Java课程设计--飞机大战
  17. Android 11.0 系统去掉多用户功能
  18. Git提交信息规范化
  19. 用Javascript实现人脸美容
  20. 20145312《信息安全系统设计基础》实验四 驱动程序设计

热门文章

  1. layui常用的表单标签_Layui常用组件:表格(table)
  2. java bitset_Java BitSet nextSetBit()方法与示例
  3. 案例:Redis 问题汇总和相关解决方案
  4. NVelocity标签使用详解
  5. Android 如何让EditText不自动获取焦点
  6. Oracle 练习P297 131026 PL/SQL块程序
  7. 第八章Transact-SQL程序设计
  8. C语言入门——内功心法
  9. Latex的subcaption横向插入两张子图的的用法
  10. linux系统启动自动启动,linux系统下的自动启动