当前位置: 首页 > news >正文

JVM - 认识JVM规范

目录

重识JVM

JVM规范作用及其核心

JVM 整体组成

理解ClassFile结构

ASM开发


  • 重识JVM

  • JVM概述
  • JVM:
    • Java Virtual Machine,也就是Java虚拟机
  • 所谓虚拟机是指:
    • 通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统
  • JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境
  • JVM主要功能
    • 1.通过ClassLoader寻找和装载class文件
    • 2.解释字节码成为指令并执行,提供class文件的运行环境
    • 3.进行运行期间的内存分配和垃圾回收
    • 4.提供与硬件交互的平台
  • 虚拟机是Java平台无关的保障

  • JVM规范作用及其核心

  • JVM规范作用
  • JVM虚拟机规范为不同的硬件平台提供了一种编译Java技术代码的规范
  • 该规范使Java软件独立于平台,因为编译是针对作为虚拟机的“一般机器”而做
  • 这个“一般机器”可用软件模拟并运行于各种现存的计算机系统,也可用硬件来实现
  • JVM规范定义的主要内容
  • 字节码指令集(相当于中央处理器CPU)
  • Class文件的格式
  • 数据类型和值
  • 运行时数据区
  • 栈帧
  • 特殊方法
  • 类库
  • 异常
  • 虚拟机的启动、加载、链接和初始化
  • JVM 整体组成

  • 1.类加载器(ClassLoader)
  • 2.运行时数据区(Runtime Data Area)
  • 3.执行引擎(Execution Engine)
  • 4.本地库接口(Native Interface)
  • 各个组成部分的用途:
  • 程序在执行之前先要把java代码转换成字节码(class文件)
  • jvm首先需要把字节码通过一定的方式 类加载器(ClassLoader) 把文件加载到内存中 运行时数据区(Runtime Data Area)
  • 而字节码文件是jvm的一套指令集规范,并不能直接交给底层操作系统去执行
  • 因此需要特定的命令解析器 执行引擎(Execution Engine) 将字节码翻译成底层系统指令再交由CPU去执行
  • 而这个过程中需要调用其他语言的接口 本地库接口(Native Interface) 来实现整个程序的功能
  • 这就是这4个主要组成部分的职责与功能
  • 而通常所说的jvm组成指的是运行时数据区(Runtime Data Area)
  • 因为通常需要程序员调试分析的区域就是“运行时数据区”,或者更具体的来说就是“运行时数据区”里面的Heap(堆)模块
  • 理解ClassFile结构

  • Class文件是JVM的输入,Java虚拟机规范中定义了Class文件的结构
  • Class文件是JVM实现平台无关、技术无关的基础
  • Class文件是一组以8字节为单位的字节流,各个数据项目按序紧凑排列
  • 对于占用空间大于8字节的数据项,按照高位在前的方式分割成多个8字节进行存储
  • Class文件格式里面只有两种类型:无符号数、表
    • 无符号数:基本数据类型,以u1、u2、u4、u8来代表几个字节的无符号数
    • 表:由多个无符号和其它表构成的复合数据类型,通常以"_info"结尾
  • 说明:
  • javap工具生成非正式的“虚拟机汇编语言”,格式如下:
    • <index><opcode>[<operand1>[<operand2>...]][<comment>]
  • <index>是指令操作码在数组中的下标,该数组以字节形式来存储当前方法的Java虚拟机代码;也可以是相对于方法起始处的字节偏移量
  • <opcode>是指令的助记码
  • <operand>是操作数
  • <comment>是行尾的注释
  • constant_pool_count:是从1开始的
  • 不同的常量类型,用tag来区分,它后面对应的info结构是不一样的
  • L表示对象,[ 表示数组、V表示void
  • stack:方法执行时,操作栈的深度
  • Locals:局部变量所需的存储空间,单位是 slot
  • slot是虚拟机为局部变量分配内存所使用的最小单位
  • args_size:参数个数,为1的话,因实例方法默认会传入 this,locals 也会预留一个slot来存放
  • ASM开发

  • ASM是一个Java字节码的操纵框架,它能被用来动态生成类或增强既有类的功能
  • ASM可以直接产生二进制class文件,也可以在类被加载入虚拟机之前动态改变类行为
  • ASM从类文件中读取信息后,能够改变类行为,分析类信息,甚至根据类的要求产生新类
  • 目前许多框架如cglib、Hibernate、Spring都直接或间接地使用ASM操作字节码
  • ASM编程模型
  • Core API:提供了基于事件形式的编程模型
    • 该模型不需要一次性将整个类的结构读取到内存中,因此这种方式更快,需要的内存更少,但这种编程方式难度较大
  • Tree API:提供了基于树型的编程模型
    • 该模型需要一次性将一个类的完整结构全部读取到内存中,所以这种方法需要更多的内存,这种编程方式较简单
  • ASM的Core API
  • ASM Core ApI 中操纵字节码的功能基于 ClassVisitor 接口
  • 这个接口中的每个方法对应了class文件中的每一项
  • ASM 提供了三个基于 ClassVisitor 接口的类来实现class文件的生成和转换
  • ClassReader:ClassReader解析一个类的class字节码
  • ClassAdapter:ClassAdapter是ClassVisitor的实现类,实现要变化的功能
  • ClassWriter:ClassWriter也是ClassVisitro的实现类,可以用来输出变化后的字节码
  • ASM给我们提供了 ASMifier 工具来帮助开发,可使用ASMifier工具生成ASM结构来对比

相关文章:

JVM - 认识JVM规范

目录 重识JVM JVM规范作用及其核心 JVM 整体组成 理解ClassFile结构 ASM开发 重识JVM JVM概述JVM&#xff1a; Java Virtual Machine&#xff0c;也就是Java虚拟机所谓虚拟机是指&#xff1a; 通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统…...

文献阅读笔记 # CodeBERT: A Pre-Trained Model for Programming and Natural Languages

《CodeBERT: A Pre-Trained Model for Programming and Natural Languages》EMNLP 2020 (CCF-B)作者主要是来自哈工大、中山大学的 MSRA 实习生和 MSRA、哈工大的研究员。资源&#xff1a;code | pdf相关资源&#xff1a;RoBERTa-base | CodeNN词汇&#xff1a; bimodal: 双模态…...

openHarmony的UI开发

自适应布局 拉伸能力 ​ Blank在容器主轴方向上&#xff0c;空白填充组件具有自动填充容器空余部分的能力。仅当父组件为Row/Column时生效&#xff0c;即是线性布局。这样便可以在两个固定宽度或高度的组件中间添加一个Blank()&#xff0c;将剩余空间占满&#xff0c;从而实现…...

【JavaSE】深入HashMap

文章目录1. HashMap概述2. 哈希冲突3. 树化与退化3.1 树化的意义3.2 树的退化4. 二次哈希5. put方法源码分析6. key的设计7. 并发问题参考 如何防止因哈希碰撞引起的DoS攻击_hashmap dos攻击_双子孤狼的博客-CSDN博客 为什么 HashMap 要用 h^(h &#xff1e;&#xff1e;&#…...

华为机试题:HJ62 查找输入整数二进制中1的个数(python)

文章目录博主精品专栏导航知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方法2、print() &#xff1a;打印输出。1、整型int() &#xff1a;将指定进制&#xf…...

代码随想录训练营一刷总结|

分为几个大部分&#xff1a; 数组 最先接触的部分&#xff0c;虽然说感觉是最简单的&#xff0c;但是需要掌握好基础&#xff0c;特别是小心循环。这里面需要再仔细看的就是螺旋矩阵那一块&#xff0c;其他的在后续刷的时候能用一种方法一次a就行。 链表 需要注意链表的基础…...

CSS中的几种尺寸单位

一、尺寸单位 CSS 支持多种尺寸单位&#xff0c;包括&#xff1a; px&#xff1a;像素&#xff0c;固定大小单位em&#xff1a;相对于当前元素字体大小的单位rem&#xff1a;相对于根元素&#xff08;HTML&#xff09;字体大小的单位%&#xff1a;相对于父元素的百分比单位vh…...

运维必会:ansible剧本(piaybook)

playbooks 概述以及实例操作 Playbooks 组成部分&#xff1a; Inventory Modules Ad Hoc Commands Playbooks Tasks: 任务&#xff0c;即调用模块完成的某些操作 Variables: 变量 Templates: 模板 Handlers: 处理器&#xff0c;由某时间触发执行的操作 Roles: 角色 YAML 介绍…...

活动星投票午间修身自习室制作在线投票投票制作网页

“午间修身自习室”网络评选投票_免费小程序投票推广_小程序投票平台好处手机互联网给所有人都带来不同程度的便利&#xff0c;而微信已经成为国民的系统级别的应用。现在很多人都会在微信群或朋友圈里转发投票&#xff0c;对于运营及推广来说找一个合适的投票小程序能够提高工…...

C#泛型:高级静态语言的效率利器

文章目录引入类型约束子类泛型常用的泛型数据结构前文提要&#xff1a; &#x1f48e;超快速成&#xff0c;零基础掌握C#开发中最重要的概念&#x1f48e;抽丝剥茧&#xff0c;C#面向对象快速上手&#x1f48e;Winform&#xff0c;最友好的桌面GUI框架&#x1f48e;懂了委托&a…...

澳大利亚访问学者申请流程总结

澳大利亚访问学者申请需要注意些什么&#xff1f;下面知识人网小编整理澳大利亚访问学者申请流程总结。1、取得wsk英语成绩&#xff0c;现在都是先买票再上车了。2、联系外导&#xff0c;申请意向接收函(email)。3、向留学基金委CSC提出申请。4、获批后&#xff0c;申请正式邀请…...

cookie和Session的作用和比较

目录 什么是cookie cookie的工作原理 什么是session Session的工作原理 为什么会有session和cookie cookie和session如何配合工作 cookie和Session作用 什么是会话 什么是cookie cookie是web服务器端向我们客户端发送的一块小文件&#xff0c;该文件是干嘛的呢&#xf…...

测试员都是背锅侠?测试人员避“锅”攻略,拿走不谢

最近发生了一起生产事故&#xff0c;究其根源&#xff0c;事故本身属于架构或者需求层面需要规避的问题&#xff0c;测试人员的责任其实是非常小的&#xff0c;但实际情况是&#xff1a;相关测试人员因此承担了很大的压力&#xff0c;成为质量问题的“背锅侠”。 实际上&#…...

C++: C++模板<template>

C template content&#x1f60a;前言&#x1f601;模板&#x1f495;1、泛型编程&#x1f60d;2、函数模板&#x1f612;2.1&#xff1a;函数模板概念&#x1f44c;2.2&#xff1a;函数模板的格式&#x1f618;2.3&#xff1a;函数模板原理&#x1f601;2.4&#xff1a;函数模…...

chmod命令详解

用法&#xff1a;chmod [选项]… 模式[,模式]… 文件…  或&#xff1a;chmod [选项]… 八进制模式 文件…  或&#xff1a;chmod [选项]… --reference参考文件 文件… Change the mode of each FILE to MODE. With --reference, change the mode of each FILE to that of R…...

状态机设计中的关键技术

⭐本专栏针对FPGA进行入门学习&#xff0c;从数电中常见的逻辑代数讲起&#xff0c;结合Verilog HDL语言学习与仿真&#xff0c;主要对组合逻辑电路与时序逻辑电路进行分析与设计&#xff0c;对状态机FSM进行剖析与建模。 &#x1f525;文章和代码已归档至【Github仓库&#xf…...

单片机开发---ESP32S3移植NES模拟器(二)

书接上文 《单片机开发—ESP32-S3模块上手》 《单片机开发—ESP32S3移植lvgl触摸屏》 《单片机开发—ESP32S3移植NES模拟器&#xff08;一&#xff09;》 暖场视频&#xff0c;小时候称这个为—超级曲线射门&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&am…...

微信小程序nodej‘s+vue警局便民服务管理系统

本文首先介绍了设计的背景与研究目的,其次介绍系统相关技术,重点叙述了系统功能分析以及详细设计,最后总结了系统的开发心得在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括“最多跑一次”微信小程序的网络应用,在外国小程序的使用已经是很普遍的方…...

第18章 MongoDB $type 操作符教程

MongoDB $type 操作符 描述 在本章节中&#xff0c;咱们将继续讨论MongoDB中条件操作符 $type。 $type操作符是基于BSON类型来检索集合中匹配的数据类型&#xff0c;并return 结果。 MongoDB 中可以使用的类型如下表所示&#xff1a; 类型数字备注Double1 String2 Object3…...

【MySQL主从复制】快速配置

本文配置环境Windows和Linux。 windows主 Linux 从 一、主库配置 首先保证Linux和防火墙开启3306端口或关闭防火墙。 登录Mysql管理员账户: GRANT REPLICATION slave,reload,super ON *.* TO root@从库ip地址 IDENtIFIED BY root; flush privileges; 本地的mysql可以被:…...

企业级智能客服系统实战:基于RAG与语义检索的架构设计与避坑指南

最近在做一个企业级智能客服系统的项目&#xff0c;客户对传统客服的响应速度和知识更新效率很不满意。我们团队尝试了多种方案&#xff0c;最终决定采用RAG&#xff08;检索增强生成&#xff09;结合语义检索的技术路线。今天就来分享一下我们的实战经验&#xff0c;特别是架构…...

ChatGPT Prompt Engineering实战指南:从原理到开发者最佳实践

背景痛点&#xff1a;开发者为何需要系统化的提示工程&#xff1f; 对于许多开发者而言&#xff0c;初次接触ChatGPT等大语言模型API时&#xff0c;常常会经历一个从兴奋到困惑的过程。模型的能力令人惊叹&#xff0c;但将其稳定、可靠地集成到生产应用中却充满挑战。最常见的…...

5大优势:邱锡鹏《神经网络与深度学习》如何帮新手系统掌握AI核心技术

5大优势&#xff1a;邱锡鹏《神经网络与深度学习》如何帮新手系统掌握AI核心技术 【免费下载链接】nndl.github.io 《神经网络与深度学习》 邱锡鹏著 Neural Network and Deep Learning 项目地址: https://gitcode.com/GitHub_Trending/nn/nndl.github.io 神经网络与深…...

OpenClaw 最新保姆级飞书对接指南教程 搭建属于你的 AI 助手

OpenClaw 是什么&#xff1f; OpenClaw(原名 Clawdbot,后更名为 Moltbot,现正式命名为 OpenClaw)是一个运行在你本地环境的高权限 AI 智能体。它的核心特性包括&#xff1a; 本地部署&#xff1a;运行在你的服务器或电脑上,数据完全自主可控多平台支持&#xff1a;支持飞书、…...

避坑指南:Unity粒子系统做星星特效时最容易忽略的3个细节(附材质包)

Unity粒子系统制作星星特效的三大隐形陷阱与解决方案 在游戏开发中&#xff0c;粒子特效是营造氛围、增强视觉体验的重要手段。星星闪烁特效看似简单&#xff0c;但许多中级开发者在实际制作时常常遇到"塑料感"、"不自然"等问题。本文将深入剖析三个最容易…...

C#集成视觉工具:构建高效图片格式转换中间层

1. 为什么需要图片格式转换中间层&#xff1f; 在工业自动化和机器视觉项目中&#xff0c;我们经常遇到一个头疼的问题&#xff1a;不同视觉工具生成的图像格式五花八门。VisionPro用ICogImage&#xff0c;Halcon用HObject&#xff0c;OpenCV用Mat&#xff0c;而C#最熟悉的却是…...

热处理设备如何影响紧固件可靠性?6月上海紧固件展解析

2026上海紧固件专业展&#xff08;Fastener Expo Shanghai 2026&#xff09;将于2026年6月24日至26日在国家会展中心&#xff08;上海&#xff09;举行。作为紧固件行业具有国际影响力的重要平台之一&#xff0c;本届展会将重点呈现制造工艺与装备升级对产品质量的深远影响。其…...

AIGlasses_for_navigationGPU算力优化:RTX3060高效运行视频分割实测

AIGlasses_for_navigation GPU算力优化&#xff1a;RTX3060高效运行视频分割实测 1. 引言 如果你手头有一块RTX 3060显卡&#xff0c;想用它来跑AI视频处理任务&#xff0c;比如实时分割视频里的盲道、斑马线&#xff0c;会不会担心性能不够&#xff1f;或者觉得部署起来太麻…...

别再死磕线性回归了!用Python的scikit-learn玩转高斯过程回归(GPR),5分钟搞定预测+不确定性可视化

高斯过程回归实战&#xff1a;用Python轻松实现非线性预测与不确定性可视化 当你的数据像过山车一样起伏不定时&#xff0c;线性回归那根笔直的线条就显得力不从心了。作为一名数据科学实践者&#xff0c;我经常遇到这种情况&#xff1a;客户拿着明显非线性的数据集&#xff0c…...

基于Python的智能客服机器人课程辅导系统设计与实现:从架构到AI辅助开发实战

痛点分析&#xff1a;传统辅导系统的“三座大山” 在传统的课程辅导场景中&#xff0c;无论是线上论坛、邮件答疑还是简单的FAQ页面&#xff0c;都普遍面临着几个难以逾越的痛点&#xff0c;我称之为“三座大山”。 第一座大山是响应速度慢。学生遇到问题&#xff0c;尤其是在深…...