【JVM】ASM开发



认识ASM

ASM是一个Java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能

ASM可以直接产生二进制class文件,也可以在类被加载入虚拟机之前动态改变类行为,ASM从类文件中读入信息后能够改变类行为,分析类信息,甚至能根据要求生成新类。

目前许多框架如cglib、Hibernate、Spring都直接或间接地使用ASM操作字节码。

ASM编程模型

1)Core API:提供了基于事件形式的编程模型。该模型不需要一次性将整个类的结构读取到内存中,因此这种方式更快,需要更少的内存,但这种编程方式难度较大。
2)Tree API:提供了基于树形的编程模型。该模型需要一次性将一个类的完整结构全部读取到内存当中,所以这种方法需要更多的内存,这种编程方式较简单。

ASM的核心API

ASM Core API中操纵字节码的功能基于 ClassVisitor 接囗。这个接口中的每个方法对应了 class 文件中的每一项。
ASM 提供了三个基于 ClassVisitor 接囗的类来实现 class文件的生成和转换:
1、ClassReader:ClassReader解析一个类的 class 字节码。2、ClassAdapter:ClassAdapter是ClassVisitor 的实现类,实现要变化的功能。3 、ClassWriter:ClassWriter也是 ClassVisitor 的实现类,可以用来输出变化后的字节码。

也就是一个负责读入,一个负责改造,改造之后还有一个负责输出出去。

ASM给我们提供了ASMifier工具来帮助开发,可使用ASMifier工具生成ASM结构来对比。

ASMifier工具演示

引入ASM的jar包和util包, 之后就可以编写代码了。我们先编写下面简单的Java代码,想要统计方法执行的时间:

接下来在命令行中用ASMifier工具生成一下。

 回车后会生成一堆东西,帮我们把操作字节码的代码写好。

那有了这么多东西该怎么用呢,我们又想改造成什么样子呢?

我们先把改造的代码写一下,然后再通过ASMifier工具生成一下,就可以对比两次生成的ASM结构有什么不同:

 对比后发现,修改后的代码的ASM结构分别在两处加了一堆东西。

编写我们自己的ClassVisitor

这个工具提供的代码命令可以直接粘进咱们代码中,十分省力。 

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

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

相关文章

【CSS】认识CSS选择器及各选择器对应的用法

目录 一、什么是CSS? 二、CSS 选择器 1. 标签选择器 2. 类选择器 3. ID选择器 4. 通配符选择器 5. 复合选择器 一、什么是CSS? CSS(Cascading Style Sheet),层叠样式表。它与 HTML(超文本标记语言)一起使用&am…

线下研讨会 技术沙龙|乐鑫芯片与 ESP RainMaker® 为科技初创企业赋能

众多科技初创企业在智能硬件市场迅猛发展的背景下,对不断变化的需求展现出了高度的敏锐性,期望能够快速将其转化为切实的产品方案。然而,面对复杂繁重的软硬件集成任务,这些企业往往容易陷入研发瓶颈、资金短缺以及效率低下等多重…

前端小程序调用 getLocation 实现地图位置功能,通过 纬度:latitude 经度: longitude 获取当前位置

1、首先登录一下 腾讯的位置服务 有账号就登录没账号就注册, 点击右上角的控制台点击左侧的应用管理 ---> 我的应用 ---->> 创建应用 1、创建应用 2、列表就会显示我们刚刚创建好的 key 3、点击添加 key 4、按照要求填写信息 我们用的是小程序 所以选择…

vue2和vue3区别: 探索关键差异

vue2和vue3区别: 探索关键差异 Vue.js 作为流行的前端框架,其版本 3 带来了许多令人兴奋的改进和新功能。虽然 Vue 3 保持了与 Vue 2 的相似性,但也存在一些关键差异需要开发者注意。本文将通过表格形式,清晰地展现 Vue 2 和 Vue …

Python-VBA函数之旅-str函数

目录 一、str函数的常见应用场景 二、str函数使用注意事项 三、如何用好str函数? 1、str函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、str函数的常…

搭建Springboot的基础开发框架-01

本系列专题虽然是按教学的深度来定稿的,但在项目结构和代码组织方面是按公司系统的要求来书定的。在本章中主要介绍下基础开发框架的功能。后续所有章节的项目全是在本基础框架的基础上演进的。 工程结构介绍 SpringbootSeries:父工程,定义一…

Linux(Ubuntu24.04) 安装 MinIO

本文所使用的 Ubuntu 系统版本是 Ubuntu 24.04 ! # 1、下载 MinIO wget https://dl.min.io/server/minio/release/linux-amd64/minio# 2、添加可执行权限 chmod x minio# 3、导出环境变量,用于设置账号密码,我设置的账号和密码都是 minioadmin export MI…

Xilinx 千兆以太网TEMAC IP核 AXI4-Lite接口信号

在AX4总线标准中,AXI4-Lite主要由向她址映射型通信。TEMAC的管理法口采用AXI4-Lite标准接口,TEMAC核的AX14-Lite接口信号如表1所示,根据AX14-Lite标准,接口角色分为主接口(Maser Interface)和从接口(Slave Interface)。主接口为通…

Ubuntu24安装搜狗输入法,修复闪屏问题

下载deb安装包:搜狗输入法linux-首页 安装:sudo dpkg -i 1.deb 搜狗输入法linux-安装指导 重启,但是完成后闪烁。按以下步骤更改桌面配置。 sudo gedit /etc/gdm3/custom.conf 取消WaylandEnable的注释即可

算法详解——回溯法

一、回溯法概述——问题背景 回溯法是一种解决约束满足问题的方法,特别适用于解决组合问题、搜索优化问题等。它通过逐步构建候选解决方案并且在这个解决方案不再可能满足约束或条件时进行剪枝和回溯。具体来说,回溯法可以应用于以下类型的问题&#xff…

怎么做自己的网站

现如今,拥有自己的网站已经成为现代生活中的一种标志。无论是个人博客、在线商店还是企业官网,都可以通过拥有一个网站来展示自己的个性、产品或服务。在这篇文章中,我将分享如何创建和管理自己的网站。 首先,你需要选择一个合适的…

Ubuntu22.04下安装kafka_2.11-0.10.1.0并运行简单实例

目录 一、版本信息 二、安装Kafka 1. 将Kafka安装包移到下载目录中 2. 安装Kafka并确保hadoop用户对Kafka目录有操作权限 三、启动Kafka并测试Kafka是否正常工作 1. 启动Kafka 2. 测试Kafka是否正常工作 一、版本信息 虚拟机产品:VMware Workstation 17 Pro…

【AI+老照片焕新】母亲节用AI把时间的印记变成暖心礼物

想念是一张泛黄的照片,藏在抽屉里的笑容,总是那么亲切。今天是母亲节,是不是想给妈妈来点不一样的惊喜?用AI技术,把那些老照片瞬间焕新,让妈妈的青春记忆重放光华! 想象一下,妈妈年…

社交媒体数据恢复:脉脉

在使用社交软件脉脉的过程中,可能会遇到数据丢失的情况,如误删了重要信息或者更换手机后数据未能同步等问题。那么如何恢复脉脉中的数据呢?本文将为您提供详细的步骤指导。 注意:以下操作需要在脉脉账户登录状态下进行。 登录脉…

具有CMOS输出,高速响应特点的新型汽车级晶振SG2520CAA

爱普生推出的汽车级晶振SG2520CAA。SG2520CAA是一款CMOS输出的,具有高响应速度的2520封装汽车级晶振,具有低电流消耗,1.6 V至3.63 V的宽工作电压,以及-40C至85C的宽工作温度范围,此外还可提供高达125C的工作温度。符合…

C++Linux系统编程——makefile

Makefile Makefile简介 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于…

SSH隧道可以做什么?

SSH隧道是SSH协议服务端提供的一种扩展功能,一般仅在linux服务器的SSH服务端中提供,其它的如交换机、防火墙等网络设备中,虽然支持SSH协议,但多数并不提供SSH隧道功能。 所以,在通过SSH协议连接远程设备时&#xff0c…

切换tomcat使用的jdk版本

改一下这俩地方 用这个启动时候 就可以使用对应的jdk版本了 java的classpath内容如下(换成自己的): E:\A_code\environment\tomcat\Tomcat9.0\bin\bootstrap.jar;E:\A_code\environment\tomcat\Tomcat9.0\bin\tomcat-juli.jar

【基础绘图】 09.小提琴图

效果图: 主要步骤: 1. 数据准备:生成随机数组 2. 数据处理:计算四分位数、中位数、均值、最大最小值 3. 图像绘制:绘制小提琴图 详细代码:着急的直接拖到最后有完整代码 步骤一:导入库包及…

稳定网络的诀窍:静态住宅代理解决方案

在数字化时代,网络稳定性对于个人和企业都至关重要。然而,由于多种因素的影响,如地理位置、网络拥堵或网络安全问题等,网络稳定性常常受到挑战。为了应对这些挑战,静态住宅代理作为一种高效且可靠的网络解决方案&#…