JVM与Java体系结构

目录

一、Java虚拟机整体架构祥图

二、Java代码执行过程详图

三、汇编语言、机器语言、高级语言关系

四、JVM的架构模型

五、JVM的生命周期 

(一)虚拟机的启动

(二)虚拟机的执行

(三)虚拟机的退出

六、JVM发展历程

(一)sun Classic VM

(二)Exact VM

(三)hotspot虚拟机

(四)JRockit

(五)IBM J9

(六) Azul VM

(七)Liquid VM

(八)Apache Harmony

(九)TaobaoJVM

(十)Dalvik VM


一、Java虚拟机整体架构祥图

二、Java代码执行过程详图

三、汇编语言、机器语言、高级语言关系

四、JVM的架构模型

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

两种架构的区别:

基于栈式架构:

1、优点

  • 设计和实现简单,适用于资源受限的系统
  • 避开了寄存器的分配难题:使用零地址指令方式分配
  • 指令流中大部分都是零地址指令,其执行过程依赖操作栈,指令集更小,编译器容易实现
    • 8位字节码,所以说指令集更小,但是完成一项操作花费的指令相对多。
  • 不需要硬件支持,可移植性更好,更好实现跨平台

2、缺点

  • 性能下降,实现同样的功能需要更多的指令,毕竟还要入栈出栈等操作

基于寄存器架构:

1、优点

  • 性能优秀,执行更高效
  • 花费更少的指令去完成一项操作

2、缺点

  • 指令集架构完全依赖硬件,可移植性差

3、典型应用是X86的二进制指令集,比如传统的PC以及安卓的Davlik虚拟机(16位字节码)

大部分情况下,指令集往往以一地址指令,二地址指令和三地址指令为主。

为什么说栈式花费的指令多?

我们可以通过javap命令反编译一个文件,查看其计算流程:

javap 查看字节码

  • -v输出附加信息
  • -l输出行号和本地变量表
  • -p显示所有类和成员
  • -c对代码进行反汇编

五、JVM的生命周期 

(一)虚拟机的启动

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

(二)虚拟机的执行

执行一个所谓的Java程序的时候,真正执行的是一个叫Java虚拟机的进程

(三)虚拟机的退出

  • 程序正常执行结束
  • 执行过程遇到异常或错误而异常终止
  • 操作系统错误导致Java虚拟机进程终止
  • Runtime类或System类的exit方法、runtime类的halt方法,并且Java安全管理器允许这次exit或halt操作
    • halt停止、停下、阻止
    • exit方法源码:static native void halt0(int status)
  • JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机退出的情况

六、JVM发展历程

(一)sun Classic VM

  • 世界第一款商用Java虚拟机
  • JDK1.4时被淘汰
  • 只提供了解释器
  • 如果使用JIT编译器,就需要外挂,但是JIT和解释器不能配合工作

(二)Exact VM

  • 为了解决上一个虚拟机问题,JDK1.2时,sun提供了此虚拟机
  • Exact Memory Management:准确式内存管理
    • 虚拟机知道内存中某个位置的数据是什么类型
  • 具有现代高性能虚拟机的雏形
    • 热点探测
    • 编译器与解释器混合工作模式
  • 只在Solaris平台短暂使用,其他平台还是Classic vm
    • 英雄气短,被hotspot虚拟机替换

(三)hotspot虚拟机

  • 最初由Longview  Technologies的小公司设计,1997年被sun公司收购,2009年sun公司被甲骨文收购
  • JDK1.3时,HotSpot VM成为默认虚拟机
  • 绝对市场地位,称霸武林
    • JDK6,8等均默认
  • HotSpot就是他的热点代码探测技术
    • 通过计数器找到最具编译价值代码,触发即时编译或栈上替换
    • 通过编译器与解释器协同工作,在优化响应时间和最佳执行性能中取得平

(四)JRockit

  • BEA公司
  • 专注服务器端应用
    • 不太关注程序启动速度,引起JRockit内部不包括解析器实现,全部代码靠即时编译器编译后执行
  • 世界上最快的JVM
  • 全面的Java运行时解决方案组合
    • JRockit Real Time提供毫秒或微秒级的JVM响应时间,适合财务、军事指挥,电信网络的需要
    • MissionControl服务套件,极低的开销,来监控、管理和分析生成环境中的应用程序的工具
  • 2008年BEA被oracle收购
  • JDK8中,在HOTSPOT的基础上,移植JRockit的优秀特性

(五)IBM J9

  • 全称:IBM Technology for java Virtual Machine 简称IT4J,内部代号J9
  • 市场定位与HotSpot接近,服务器端、桌面应用,嵌入式等多用途VM
  • 广泛应用于IBM的各种Java产品
    • IBM产品结合使用性能最好
  • 有影响力的三大商用虚拟机之一
  • 2017开源,OPEN J9

(六) Azul VM

  • 与特定硬件平台绑定、软硬件配合的专有虚拟机
  • 运行于Azul Systems公司的专有硬件Vega系统上的虚拟机
  • 每个实例可以管理至少数十个CPU和数百GB内存的硬件资源,并提供在巨大内存范围内实现可控的GC时间的垃圾收集器,专有硬件优化的线程调度等优秀特性
  • 2010年,发布自己的Zing JVM,可以在通用X86平台上提供接近于vega系统的特性

(七)Liquid VM

  • BEA公司开发的,运行在自家Hypervisor系统上
  • 不需要操作系统支持,本身实现了一个专用操作系统的必要功能,如线程调度、文件系统、网络支持等
  • 随着JRockit虚拟机终止开发,Liquid VM项目也停止了

 (八)Apache Harmony

  • JDK1.5,1.6兼容
  • IBM和Intel联合开发的开源JVM,2011年退役
  • Java类库代码吸纳进了Android SDK

(九)TaobaoJVM

  • 基于OpenJDK开发了自己的定制版本AlibabaJDK
  • 深度定制且开源的高性能服务器版JAVA虚拟机
  • GCIH:GC invisible heap,将生命周期较长的Java对象从heap中已到heap之外,并且GC不能管理GCIH内部的Java对象,以此达到降低GC的回收频率和提升GC的回收效率
  • GCIH中的对象还能够在多个JAVA虚拟机进程中实现共享
  • 使用crc32指令实现JVM intrinsic降低JNI的调用开销
  • 针对大数据场景的ZenGC
  • 在阿里产品上性能高,硬件严重依赖intel的CPU,损失了兼容性,但是提高了性能
  • 淘宝、天猫上线,把oracle官方JVM版本全部替换

(十)Dalvik VM

  • 谷歌开发,应用于Android系统,安卓2.2提供了JIT,发展迅猛
  • 只能称作虚拟机,不能称作Java虚拟机,没有遵循Java虚拟机规范
  • 不能直接执行Java的Class文件
  • 基于寄存器架构,不是jvm的栈架构
  • 执行的是编译后的dex文件,执行效率比较高
  • 安卓5.0使用支持提前编译AOT的ART VM替换Dalvik VM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/124754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用示例和应用程序全面了解高效数据管理的Golang MySQL数据库

Golang,也被称为Go,已经成为构建强大高性能应用程序的首选语言。在处理MySQL数据库时,Golang提供了一系列强大的库,简化了数据库交互并提高了效率。在本文中,我们将深入探讨一些最流行的Golang MySQL数据库库&#xff…

数据库管理-第113期 Oracle Exadata 04-硬件选择(20231020)

数据库管理-第113期 Oracle Exadata 04-硬件选择(2023010290) 本周没写文章,主要是因为到上海参加了Oracle CAB/PAB会议,这个放在后面再讲,本期讲一讲Exadata,尤其是存储节点的硬件选择及其对应的一些通用…

mac安装并使用wireshark

mac安装并使用wireshark 1 介绍 我们在日常开发过程中,遇到了棘手的问题时,免不了查看具体网络请求情况,这个时候就需要用到抓包工具。比较著名的抓包工具就属:wireshark、fildder。我这里主要介绍wireshark。 2 安装 以mac安装为…

C#,数值计算——分类与推理Svmpolykernel的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Svmpolykernel : Svmgenkernel { public int n { get; set; } public double a { get; set; } public double b { get; set; } public double d { get; set; …

多线程---synchronized特性+原理

文章目录 synchronized特性synchronized原理锁升级/锁膨胀锁消除锁粗化 synchronized特性 互斥 当某个线程执行到某个对象的synchronized中时,其他线程如果也执行到同一个对象的synchronized就会阻塞等待。 进入synchronized修饰的代码块相当于加锁 退出synchronize…

LuatOS-SOC接口文档(air780E)--max30102 - 心率模块

max30102.init(i2c_id,int)# 初始化MAX30102传感器 参数 传入值类型 解释 int 传感器所在的i2c总线id,默认为0 int int引脚 返回值 返回值类型 解释 bool 成功返回true, 否则返回nil或者false 例子 if max30102.init(0,pin.PC05) thenlog.info("max30102&q…

IDEA MyBatisX插件介绍

一、前言 前几年写代码的时候,要一键生成DAO、XML、Entity基础代码会采用第三方工具,比如mybatis-generator-gui等,现在IDEA或Eclipse都有对应的插件,像IDEA中MyBatisX就是一个比较好用的插件。 二、MyBatisX安装配置使用 MyBa…

GO学习之 通道(nil Channel妙用)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…

Vue虚拟DOM理解 | 深入且易懂

文章目录 前言虚拟DOM理解什么是虚拟DOM虚拟DOM转为真实DOM组件的本质模板工作原理 前言 本篇文章部分内容来源于霍春阳 《Vue.js设计与实现》这本书的理解, 感兴趣的小伙伴可以自行购买阅读。可以非常明确的感受到作者对 Vue 的深刻理解以及用心, 富含非常全面的 Vue 的知识点…

面试经典150题——Day26

文章目录 一、题目二、题解 一、题目 392. Is Subsequence Given two strings s and t, return true if s is a subsequence of t, or false otherwise. A subsequence of a string is a new string that is formed from the original string by deleting some (can be none…

Mac电脑Android Studio和VS Code配置Flutter开发环境(图文超详细)

一、安装Android Studio 官网地址: https://developer.android.google.cn/ 历史版本下载地址: https://developer.android.com/studio/archive?hlzh-cn 二、安装Xcode 到App Store下载安装最新版本,如果MacOS更新不到13.0以上就无法安装…

Go-Python-Java-C-LeetCode高分解法-第十二周合集

前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接:LeetCode-Go-Python-Java-C 欢迎订阅CSDN专栏,每日一题,和博主一起进步 LeetCode专栏 我搜集到了50道精选题,适合速成概览大部分常用算法 突…

消息中间件——RabbitMQ(一)Windows/Linux环境搭建(完整版)

前言 最近在学习消息中间件——RabbitMQ,打算把这个学习过程记录下来。此章主要介绍环境搭建。此次主要是单机搭建(条件有限),包括在Windows、Linux环境下的搭建,以及RabbitMQ的监控平台搭建。 环境准备 在搭建Rabb…

机器人的触发条件有什么区别,如何巧妙的使用

简介​ 维格机器人触发条件,分为3个,分别是: 有新表单提交时、有记录满足条件时、有新的记录创建时 。 看似3个,其实是能够满足我们非常多的使用场景。 本篇将先介绍3个条件的触发条件,然后再列举一些复杂的触发条件如何用现有的触发条件来满足 注意: 维格机器人所有的…

【Python第三方包】串口通信(pySerial包)

文章目录 前言一、串口的基本使用1.1 配置串口基本信息1.2 读取串口数据1.3 写串口1.4 关闭串口二、示例代码2.1 示例1: 从串口读取数据2.2 示例2: 向串口写入数据总结前言 串口通信是许多嵌入式和物联网应用中的关键组成部分。Python 提供了许多第三方库来简化串口通信的实现…

Linux(Centos7)防火墙端口操作记录

1、nginx -t #Nginx配置文件检查 上述截图代表检查没问题 上述截图检查配置文件配置错误,并提示错误文件位置 2、systemctl restart nginx #重启Nginx 重启Nginx失败 3、systemctl status nginx.service #查看Nginx服务状态 80端口被占导致服务启动失败 4、n…

MYSQL(索引篇)

一、什么是索引 索引是一种数据结构,它用来帮助MYSQL更高效的获取数据 采用索引可以提高数据检索的效率,降低IO成本 通过索引对数据排序,降低数据排序成本,降低CPU消耗 常见的有:B树索引、B树索引、哈希索引。其中Inno…

leetcode 238. 除自身以外数组的乘积

leetcode 238. 除自身以外数组的乘积 题目说明&#xff0c;不能使用除法&#xff0c;没有思路。 答案一&#xff1a;超时&#xff0c;因为left、right和result一开始没有设置数组大小&#xff0c;存取浪费时间。 class Solution { public:vector<int> productExceptSel…

【Python】 Python之markdown模块

Python之markdown模块 为了编辑和维护方便使用的是MD来编辑(数据库和文档都是MD)&#xff0c;但是实际展示中生成的API中&#xff0c;需要HTML标签来展示&#xff0c;故此这里需要一个能转换的工具来帮忙。 1. 其他库&#xff1a; markdown markdown2 snudown 2. 安装&…

99%网工都会遇到的经典面试问题

①问题:介绍TCP连接的三次握手?追问:为什么TCP需要握手三次? 三次握手: 第一步:A向B发送一个SYN报文表示希望建立连接 第二步:B收到A发过来的数据包后&#xff0c;通过SYN得知这是一个建立连接的请求&#xff0c;于是发送ACK确认&#xff0c;由于TCP的全双工模式&#xff…