【jvm】jvm整体结构(hotspot)
目录
- 一、说明
- 二、java代码的执行流程
- 三、jvm的架构模型
- 3.1 基于栈式架构的特点
- 3.2 基于寄存器架构的特点
一、说明
- 1.hotspot vm是目前市场上高性能虚拟机的代表作之一
- 2.hotspot采用解释器与即时编译器并存的架构
- 3.java虚拟机是用来解释运行字节码文件的,入口是字节码文件
- 4.类装载子系统将字节码文件加载到内存中,生成一个大的class对象,这个过程中会涉及到加载、链接、初始化
- 5.方法区和堆可以多个线程共享
- 6.虚拟机栈、本地方法栈和程序计数器是每个线程独有一份
- 7.执行引擎分为解释器、JIT及时编译器和垃圾回收器
- 8.字节码加载到内存中后会用到解释器来解释运行,对于反复执行的热点代码会利用及时编译器提前编译出来
- 9.java代码编译成class文件叫编译器的前端,及时编译器提前编译代码叫编译器的后端
- 10.垃圾回收器实现垃圾的自动回收
- 11.操作系统只能识别机器指令,字节码指令不等同于机器指令,字节码文件能够被解释执行需要执行引擎把字节码指令翻译成机器指令
二、java代码的执行流程
- 1.java程序通过编译(这个过程有词法分析、语法分析、语法/抽象语法树、语义分析、注解抽象语法树和字节码生成器)生成字节码文件,编译过程有任何一个环节失败了都不能生成字节码文件,每个字节码文件对应着一个类
- 2.字节码文件通过jvm虚拟机执行,经过类加载器、字节码校验器、执行引擎解释器翻译字节码(解释执行)和JIT编译器(编译执行)成为机器指令被操作系统执行
- 3.主流的虚拟机都采用解释执行和编译执行并行的方式,解释器用来保证响应时间,逐行对字节码指令进行解释执行;JIT编译器针对于反复执行的热点代码再编译成机器指令,同时把这个机器指令放入方法区缓存起来,下次可以直接调用,保证执行的性能
三、jvm的架构模型
- 1.java编译器输入的指令流基本上是一种基于栈的指令集架构,另一种指令集架构是基于寄存器的指令集架构
- 2.hotspot虚拟机除了pc寄存器之外,没有其它寄存器,任何操作都需要入栈和出栈的操作,因此hotspot虚拟机是基于栈的指令集架构
- 3.由于跨平台性的设计,java的指令都是根据栈来设计的。不同平台cpu架构不同,因此不能设计为基于寄存器架构
- 4.优点是跨平台,指令集小,编译器容易实现
- 5.缺点是性能下降,实现同样的功能需要更多的指令
3.1 基于栈式架构的特点
- 1.设计和实现更简单,适用于资源受限的系统
- 2.避开了寄存器的分配难题:使用零地址指令方式分配
- 3.指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现
- 4.不需要硬件支持,可移植性更好,更好实现跨平台
3.2 基于寄存器架构的特点
- 1.典型应用是x86的二进制指令集:例如传统的PC以及Android的Davlik虚拟机
- 2.指令集架构则完全依赖硬件,可移植性差
- 3.性能优秀和执行更高效
- 4.花费更少的指令去完成一项操作
- 5.大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集是以零地址指令为主
相关文章:
【jvm】jvm整体结构(hotspot)
目录 一、说明二、java代码的执行流程三、jvm的架构模型3.1 基于栈式架构的特点3.2 基于寄存器架构的特点 一、说明 1.hotspot vm是目前市场上高性能虚拟机的代表作之一 2.hotspot采用解释器与即时编译器并存的架构 3.java虚拟机是用来解释运行字节码文件的,入口是字…...
通达信波段选股公式,使用钱德动量摆动指标(CMO)
钱德动量摆动指标(CMO)是由图莎尔钱德发明的,取值范围在-100到100之间,是捕捉价格动量的技术指标。该指标计算近期涨幅之和与近期跌幅之和的差值,然后将计算结果除以同期所有价格波动的总和。本文的波段选股公式使用均线识别趋势,…...
家电维修小程序开发指南:从零搭建到上线
随着科技的发展和人们生活水平的提高,家电已经成为人们生活中不可或缺的一部分。然而,随之而来的是家电维修门店业务的繁忙和效率的考验。为了提高家电维修门店的效率和服务质量,建立一个便捷高效的小程序已成为必要的选择。 本文将介绍一个简…...
玩赚音视频开发高阶技术——FFmpeg
随着移动互联网的普及,人们对音视频内容的需求也不断增加。无论是社交媒体平台、电商平台还是在线教育,都离不开音视频的应用。这就为音视频开发人员提供了广阔的就业机会。根据这些年来网站上的音视频开发招聘需求来看,音视频开发人员的需求…...
python 变量赋值 修改之后 原值改变
python 是一种动态语言,因此变量的类型和值 在运行时均可改变。当我们将一个变量赋值给另一个变量时,实际上是将变量的引用地址传递给新的变量,这意 味着新旧变量将指向同一个位置。因此,在更改其中一个变量的值时,另一…...
拂袖一挥,zipfile秒列zip包内容
使用wxpython列出文件夹中的zip文件及内容 最近在做一个文件管理的小工具,需要列出选择的文件夹下的所有zip压缩文件,并在点击某个zip文件时能够显示其中的内容。为此我使用了wxpython来实现这个功能。 1. 导入需要的模块 首先导入程序需要的模块: import wx import os imp…...
InnoDB文件物理结构解析2 - FIL_PAGE_INDEX
1. 关于索引组织表 InnoDB使用的是索引组织表(IOT)的方式存储表记录,索引组织表以主键构建一个B-tree的数据结构来存储行记录,行记录存储在树的叶节点内。这与Oracle数据库是不同的,Oracle数据库默认创建的表是堆组织表(HOT),HOT…...
XML-BEANS compiled schema: Could not locate compiled schema resource 异常处理
使用poi5.2.2生成ppt,生成堆叠图,设置值时抛出异常 XML-BEANS compiled schema: Could not locate compiled schema resource org/apache/poi/schemas/ooxml/system/ooxml/stoverlappercent872etype.xsb (org.apache.poi.schemas.ooxml.system.ooxml.st…...
IOC容器 - Autofac
DI(依赖注入):DI(Dependency Injection)是一种实现松耦合和可测试性的软件设计模式。它的核心思想是将依赖关系的创建与管理交给外部容器,使得对象之间只依赖于接口而不直接依赖于具体实现类。通过依赖注入…...
用i18n 实现vue2+element UI的国际化多语言切换详细步骤及代码
一、i18n的安装 这个地方要注意自己的vue版本和i1n8的匹配程度,如果是vue2点几,记得安装i18n的8版本,不然会自动安装的最新版本,后面会报错哦,查询了下资料,好像最新版本是适配的vue3。 npm install vue-…...
Vue3 :Pinia入门
Vue3 :Pinia入门 Date: May 11, 2023 Sum: Pinia概念、实现counter、getters、异步action、storeToRefs保持响应式解构 什么是Pinia Pinia 是 Vue 的专属状态管理库,可以实现跨组件或页面共享状态,是 vuex 状态管理工具的替代品,…...
Java线程池的类型和使用
Java线程池的类型和使用 引言 在并发编程中,线程池是一种非常重要的工具,它可以实现线程的复用,避免频繁地创建新线程,从而提高程序的性能和效率。Java的并发库提供了丰富的线程池功能,本文将介绍Java线程池的类型和…...
QT的信号槽的四种写法和五种链接方式
目录 四种信号槽写法: 五种连接方式: 实例: 常见错误及改正: 错误1: 未连接信号与槽 错误2: 信号和槽参数不匹配 错误3: 未使用Q_OBJECT宏 错误4: 跨线程连接未处理 在Qt中,信号(Signal)…...
Vue+SpringBoot项目开发:后台登陆功能的实现(二)
写在开始:一个搬砖程序员的随缘记录文章目录 一、SpringBoot项目的搭建二、数据库配置1、新建数据库2、新建用户表 三、SpringBoot项目的配置 一、SpringBoot项目的搭建 项目搭建传送门:从零开始,SpringBoot项目快速搭建 二、数据库配置 1、新建数据库…...
arcgis pro 3.0.2 安装及 geemap
arcgis pro 3.0.2 安装及 geemap arcgis pro 3.0.2 安装 arcgis pro 3 版本已经很多了,在网上找到资源就可以进行安装 需要注意的是:有的文件破解文件缺少,导致破解不成功。 能够新建地图就是成功了! geemap安装 1.需要进行环…...
oracle插入多表(insert all/first)
1、建测试表 CREATE TABLE EDW_INT (AGMT_NO VARCHAR2(40 BYTE) NOT NULL,AGMT_SUB_NO VARCHAR2(4 BYTE) NOT NULL,NEED_REPAY_INT NUMBER(22,2),CURR_PERIOD NUMBER(4) NOT NULL ); CREATE TABLE EDW_INT_1 (…...
工业以太网交换机-SCALANCE X200 环网组态
1.概述 SCALANCE X200 系列交换机自从2004年8月推入市场,当时交换机只能接入环网,不能做环网管理器。在各个工业现场得到了广泛的应用。2007年5月发布了X200系列新的硬件版本平台,普通交换机可以用HSR(高速冗余)方法做…...
利用 Splashtop Enterprise 改善公司的网络安全
在我们日益数字化的世界中,对强有力的网络安全措施的需求从未像现在这样迫切。随着组织扩大其数字足迹并采用远程办公解决方案,他们面临着一系列不断变化的挑战。 威胁行为者不断寻找利用漏洞的新方法,这使得企业保持领先地位至关重要。俗话…...
mqbroker.cmd闪退(mqnamesrv.cmd能正常启动)
解决: 用户目录下面store文件(如:C:\Users\Administrator\store或C:\Users\你的用户名\store),删除文件里面所有文件,再次启动即可。...
LeetCode--HOT100题(26)
目录 题目描述:142. 环形链表 II(中等)题目接口解题思路代码 PS: 题目描述:142. 环形链表 II(中等) 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
