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

javaagent字节码增强浅尝

概述

  • javaagent 技术广泛应用于对代码的增强,比如统计方法执行时间、GC 信息打印、分布式链路跟踪等;
  • 实现方式包括 javassist 和 bytebuddy,bytebuddy 是对 javassist 的改进;
  • 类似于 spring 中的 AOP;

Instrumentation 实现对 main 方法增强

说明:

  • 新建两个项目,一个打包成增强 jar 包,一个写待增强业务代码;
  • 可通过定义注解进行优化;
  • 注意 maven 打包插件;

1)新建一个 maven 项目,引入 pom 依赖,并指定增强类:

<dependencies><!-- javaagent --><dependency><groupId>javassist</groupId><artifactId>javassist</artifactId><version>3.12.1.GA</version><type>jar</type></dependency>
</dependencies><build><plugins><!-- 测试javaagent相关 --><plugin><!-- 打普通的jar包 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.2</version><configuration><!-- 打包配置 --><archive><manifestEntries><Project-name>${project.name}</Project-name><Project-version>${project.version}</Project-version><!-- main方法之前需要处理的类 --><Premain-Class>com.firechou.test.javaagent.FireAgent</Premain-Class></manifestEntries></archive><skip>true</skip></configuration></plugin></plugins>
</build>

注意插件中 Premain-Class 指定的是增强类。

2)新建代理类,编写增强逻辑

public class FireAgent {/*** 在Instrumentation中有对应的说明:当jvm以代理类的方式启动时,Instrumentation的实例将传递给premain方法* @param args* @param instrumentation*/public static void premain(String args, Instrumentation instrumentation){System.out.println("agent premain(), args: " + args);}}

3) 打包成 jar
执行打包命令:
image.png
注意:不要执行 Plugins》jar》jar:jar 命令,会提示找不到目标类。
生成增强 jar 包如下:
image.png

4)在另一个项目中,新建业务代码类,即被增强的逻辑

public class FireAgentMainTest {public static void main(String[] args) {System.out.println("hello world");}
}

添加 JVM 运行参数:

-javaagent:test-javaagent/target/test-javaagent-1.0-SNAPSHOT.jar=name=jar&age=33

image.png
运行结果:

agent premain(), args: name=jar&age=33
hello world

相关文章:

javaagent字节码增强浅尝

概述 javaagent 技术广泛应用于对代码的增强&#xff0c;比如统计方法执行时间、GC 信息打印、分布式链路跟踪等&#xff1b;实现方式包括 javassist 和 bytebuddy&#xff0c;bytebuddy 是对 javassist 的改进&#xff1b;类似于 spring 中的 AOP&#xff1b; Instrumentati…...

计算机组成原理-Cache替换算法

文章目录 总览随机算法&#xff08;RAND&#xff09;先进先出算法&#xff08;FIFO&#xff09;近期最少使用算法&#xff08;LRU&#xff09;最不经常使用算法&#xff08;LFU&#xff09;总结 总览 随机算法&#xff08;RAND&#xff09; 没有选择性地考虑替换哪一块Cache&a…...

Adobe 家族系列download

adobe 前言 Adobe公司的产品线中拥有多个家族桶&#xff0c;下面是Adobe全家桶产品的功能介绍&#xff1a; Creative Cloud&#xff08;创意云&#xff09;&#xff1a;包含Photoshop、Illustrator、InDesign、Premiere Pro、After Effects、Lightroom等创意设计、视频制作和…...

97.STL-查找算法 find

目录 STL-查找算法find 1.基本用法&#xff1a; 2.查找自定义类型&#xff1a; 3.查找范围&#xff1a; STL-查找算法find 在C的STL&#xff08;标准模板库&#xff09;中&#xff0c;find 算法用于在指定范围内查找指定值的元素。 功能描述&#xff1a; 查找指定元素&…...

如何应对雨天飞行的挑战?无人机机库防护能力解析

一、 背景介绍 无人机机库是无人机停放和起降场所&#xff0c;类似传统飞机的 hangar&#xff08;飞机库&#xff09;。它是一个专门用于存储、维护和保护无人机的设施。无人机机库的存在有助于提高无人机的安全性&#xff0c;同时也为无人机提供了一个有序的管理场所。 雨天…...

机器学习笔记 - 3D数据的常见表示方式

一、简述 从单一角度而自动合成3D数据是人类视觉和大脑的基本功能,这对计算机视觉算法来说是比较难的。但随着LiDAR、RGB-D 相机(RealSense、Kinect)和3D扫描仪等3D传感器的普及和价格的降低,3D 采集技术的最新进展取得了巨大飞跃。与广泛使用的 2D 数据不同,3D 数据具有丰…...

【Node.js】解决npm报错:RequestError: unable to verify the first certificate

1. 问题简述 帖主从nodejs官网下载安装nodejs后&#xff0c;发现使用以下命令安装electron会报错&#xff1a; npm install electron 报错信息如下&#xff1a; npm ERR! RequestError: unable to verify the first certificate 2. 解决方案 网上列举的方案&#xff0c;无…...

语言模型文本处理基石:Tokenizer简明概述

编者按&#xff1a;近年来&#xff0c;人工智能技术飞速发展&#xff0c;尤其是大型语言模型的问世&#xff0c;让 AI 写作、聊天等能力有了质的飞跃。如何更好地理解和利用这些生成式 AI&#xff0c;成为许多开发者和用户关心的问题。 今天&#xff0c;我们推出的这篇文章有助…...

淘宝商品详情数据接口(店铺搬家、数据分析、代购商城、ERP选品、无货源铺货、品牌监控)

使用淘宝API接口需要以下步骤&#xff1a; 注册开发者账号&#xff1a;在淘宝开放平台&#xff08;https://o0b.cn/anzexi&#xff09;上注册一个开发者账号&#xff0c;并创建一个应用。 获取API密钥&#xff1a;在应用页面上获取API密钥&#xff0c;这是后续调用API接口的凭…...

面试篇之微服务(一)

目录 概览 1.什么是微服务&#xff1f; 2.微服务带来了哪些挑战&#xff1f; 3.现在有哪些流行的微服务解决方案&#xff1f; 这三种方案有什么区别吗&#xff1f; 4.说下微服务有哪些组件&#xff1f; 注册中心 5.注册中心是用来干什么的&#xff1f; 6.SpringCloud可…...

智慧科研助力科研数据的分析处理

如今&#xff0c;科研领域的发展日新月异&#xff0c;数据量也越来越大。这时&#xff0c;智慧科研可视化技术不仅为科研人员提供了快速高效的数据分析手段&#xff0c;而且为科研工作的推进提供了新的思路和方法。通过可视化手段&#xff0c;我们可以将各种数据、信息、知识以…...

el-select实现分屏效果

动态绑定class值 &#xff0c;多种判断 :class"type 8 ? home-stye-2 : type 24 ? home-stye-1 : home-stye-3" <div class"home-right-top"><div class"home-right-top-video"><el-row :gutter"20"><el-c…...

微信小程序本地和真机调试文件上传成功但体验版不成功

可能是微信小程序ip白名单的问题&#xff0c;去微信公众平台&#xff08;小程序&#xff09;上设置小程序的ip白名单 1、在本地中取消不校验 然后在本地去上传文件&#xff0c;就会发现控制台报错了&#xff0c;会提示一个https什么不在ip白名单&#xff0c;复制那个网址 2、…...

windows系统用nginx部署web应用

要在Windows系统上使用Nginx进行本地部署和运行Web应用程序&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.首先下载nginx&#xff0c;需要去nginx官网&#xff1a; nginx: download 下载最新版本的&#xff1a; 2.解压缩Nginx&#xff1a;找个磁盘位置&#xff0c;新…...

如何利用Python进行数据归一化?

1. 知识简介 数据归一化是数据预处理的一项重要步骤&#xff0c;它对于提高模型性能、加速模型训练、避免数值计算问题以及提高模型的泛化能力都具有重要作用。进行数据归一化可以起到以下作用&#xff1a;消除量纲影响&#xff0c;加速模型收敛&#xff0c;提高模型性能&…...

Linux 基本语句_13_消息队列

概念&#xff1a; 不同进程能通过消息队列来进行通信&#xff0c;不同进程也能获取或发送特定类型的消息&#xff0c;即选择性的收发消息。 一般一个程序采取子进程发消息&#xff0c;父进程收消息的模式 常用函数功能&#xff1a; fork(); // 创建子进程 struct msgbuf{ …...

Maven——仓库

Maven坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式&#xff1b;而构件的物理表示方式是文件&#xff0c;Maven通过仓库来统一管理这些文件。 1、何为Maven仓库 在Maven世界中&#xff0c;任何一个依赖、插件或者项目构建的输出&#xff0c;都可以称为构件。例如&…...

Pandas:一个实用高效的Python数据处理库

个人网站 文章首发公众号&#xff1a;小肖学数据分析 导语&#xff1a; Pandas是一个强大且易于使用的Python数据处理库&#xff0c;广泛应用于数据分析和数据科学领域。本文将介绍Pandas库的基本概念、功能和使用方法&#xff0c;并提供详细的示例&#xff0c;帮助小白快速…...

Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想

目录 一、Lombok工具包下载 二、前后端互联的图书管理系统 规范 三、分层思想 三层架构&#xff1a; 1.表现层 2.业务逻辑层 3.数据层 一、Lombok工具包下载 这个工具包是为了做什么呢&#xff1f; 他是为了不去反复的设置setting and getting 而去产生的工具包 ⚠️工具…...

DDoS高防IP到底是什么?

DDoS高防IP是提供一个带防御的IP&#xff0c;主要是针对网络中的DDoS攻击进行保护&#xff0c;是针对互联网服务器遭受大流量的DDoS攻击后&#xff0c;导致服务不可用的情况下&#xff0c;用户可以通过配置高防IP&#xff0c;将攻击流量引流到高防IP上&#xff0c;从而确保源站…...

VLC安卓版隐藏功能大揭秘:这些options参数让你的播放体验飞起

VLC安卓版隐藏功能大揭秘&#xff1a;这些options参数让你的播放体验飞起 作为安卓平台上最强大的开源播放器&#xff0c;VLC的潜力远不止表面看到的那些基础功能。许多用户不知道的是&#xff0c;通过调整options参数&#xff0c;可以彻底改变播放体验——解决卡顿、优化画质、…...

突破音乐格式限制的全方位解决方案:让你的音频文件重获自由

突破音乐格式限制的全方位解决方案&#xff1a;让你的音频文件重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: …...

数字化转型架构下的数据安全治理指南:以数据安全为核心的安全立体防御体系、数据安全体系、数据安全现状评估报告···(附相关资料)

微信公众号&#xff1a;木木自由&#xff0c;更多数据分析&#xff0c;经营分析、财务分析、商业分析、数据治理、数据要素、数据资产干货以及资料分享木木自由 数据分析领地Digital Technology Summit在数字经济深度发展的今天&#xff0c;数字化转型已成为企业生存与发展的…...

3步实现微信聊天记录永久保存与智能分析的完整方案

3步实现微信聊天记录永久保存与智能分析的完整方案 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg 在数…...

告别Keil和IAR?试试这款专为RISC-V打造的免费IDE:MounRiver Studio深度体验

从Keil/IAR到MounRiver Studio&#xff1a;RISC-V开发者的IDE迁移实战指南 当ARM架构的STM32开发者首次接触RISC-V平台时&#xff0c;往往会面临一个灵魂拷问&#xff1a;能否延续Keil或IAR那套熟悉的开发流程&#xff1f;事实上&#xff0c;专为RISC-V打造的MounRiver Studio正…...

GCP 成本优化指南

5 分钟速览 我想… 用什么 预期效果 看钱花在哪了 Billing Reports + Cost Table 按服务/项目/标签拆分费用 费用超了自动告警 Budget Alerts 50%/80%/100% 阈值通知 深度分析费用趋势 BigQuery 费用导出 自定义 SQL 分析任意维度 降低计算成本 CUD / Spot VM 计算费用降 30%-7…...

跨平台资源下载终极方案:res-downloader如何破解多平台内容获取难题

跨平台资源下载终极方案&#xff1a;res-downloader如何破解多平台内容获取难题 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader …...

2026最权威的AI辅助写作神器解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 伴随人工智能技术迅猛发展&#xff0c;AI工具于毕业论文写作里的运用愈发广泛&#xff0c;学…...

小型葡萄除梗破碎机的设计【三维proe+7张cad图纸+CAXA图纸+毕业论文】

小型葡萄除梗破碎机是葡萄加工领域的关键设备&#xff0c;其核心作用在于高效分离葡萄果粒与果梗&#xff0c;同时实现果粒的适度破碎&#xff0c;为后续发酵或榨汁工艺提供优质原料。传统人工除梗破碎效率低、劳动强度大&#xff0c;且易因操作差异影响原料品质。该设备通过机…...

TouchGal终极指南:3步打造你的专属Galgame社区家园

TouchGal终极指南&#xff1a;3步打造你的专属Galgame社区家园 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next TouchGal是一个专为Ga…...