网站首页 > 开源技术 正文
Java程序是运行在JVM虚拟机之上的,JVM执行字节码指令使应用程序运行起来。通过在JVM虚拟机上运行字节码使得Java程序实现跨平台,一次编译多次运行。
为什么要操作Java虚拟机字节码
在系统运行时经常需要动态增强应用能力,但是Java语言属于静态编译语言,不能动态更新,如果需要增强功能需要修改代码重新编译。如果不想编译代码那么可以通过修改字节码添加动态代理能力。基于修改字节码的使用场景常见于AOP动态代理,APM数据采集,系统运行诊断等。许多开源项目中使用动态修改字节码技术实现能力增强,如Spring、Arthas。
操作Java虚拟机字节码常见利器
目前常用的操作JVM虚拟机字节码的框架有ASM、Javassist、Byte buddy、BCEL、ByteKit。
1、ASM
一个非常小且快速的字节码操作框架。性能高适合在动态系统中使用。大名鼎鼎的CGLIB就基于ASM实现。
2、Javassist
一种使用简单的常用框架,不需要了解class文件结构,也不需要了解字节码指令,就能动态改变类的结构或生成类。使用案例Dubbo。
3、Byte buddy
代码生成和操作库用于在Java应用程序运行时创建和修改Java类无需编译器帮助。使用案例Apache SkyWalking。
4、BCEL
为用户提供一种方便的方法来分析、创建和操作Java类文件。
5、ByteKit
提供一套简洁的API字节码操作工具。阿里开源诊断工具Arthas中大量使用。
JVM字节码操作工具应根据实际需求进行选择。
猜你喜欢
- 2024-12-23 完全零基础入门Fastjson系列漏洞 fastjson漏洞最新bug
- 2024-12-23 在老挝汽车远不如摩托车实用,上下班高峰期,老挝交通太糟糕
- 2024-12-23 SpringMVC源码解析 springmvc源码解析 博客园
- 2024-12-23 十万字解析java免查杀合集 10万字java总结
- 2024-12-23 8K字详解Java安全之动态加载字节码
- 2024-12-23 白盒自动化测试工具:FindBugs的使用指南
- 2024-12-23 Java单向代码执行链配合的动态代码上下文执行
- 2024-12-23 2023级网络安全岗面试题及面试经验分享
- 2024-12-23 结合 Jimureport 的某个漏洞披露看 Aviator 表达式注入
- 2024-12-23 IDEA 的 debug 怎么实现?出于这个好奇心,我越挖越深
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)