JPDA 架构研究2 - JVMTI代理

简介:

引入:

我们先从JVMTI讲起。JVMTI的主要作用是提供一组接口来检测VM的状态和控制VM中运行的JAVA程序。JVMTI是个双向接口:

JVMTI的客户端叫Agent,它会在VM发生变化时通过事件机制被通知到变化。

JVMTI的服务端是许多函数,它们会和VM实际打交道并把结果告知Agent.


实践:

我们这里先来看下Agent. 


Agent的方法定义在哪里呢?它们定义在$JAVA_HOME/include/jvmti.h文件中。

1
2
3
4
5
JNIEXPORT jint JNICALL
Agent_OnLoad(JavaVM *vm,  char  *options,  void  *reserved);
 
JNIEXPORT  void  JNICAL。
Agent_OnUnload(JavaVM *vm);


Agent_OnLoad方法:

当代理被VM加载时,会由VM调用Agent_Onload方法。此时VM有如下能力:

(1)VM的System Property已经被设置完毕。

(2)VM的Capabilities已经被设置完毕。

(3)任何字节码都没被执行。

(4)任何类都没有被加载。

(5)任何对象都没有被创建。


Agent_OnLoad实现过程中,最重要的事情之一就是调用GetEnv方法来获取JVMTI环境的指针。

1
jint GetEnv(JavaVM *vm,  void  **env, jint version);

这样,这个代理就可以知道被代理的环境的全部信息。



Agent_OnUnload方法:

当代理被VM卸载时,会由VM调用Agent_OnUnload方法。一般发生在终止VM的时候,它一般可以用来清理在Agent_OnLoad阶段创建的资源。


因为我们在远程调试时候启动JVM时候加了代理参数:

java -agentlib:<agentLibName> ,而agentLibName我们配置的是jdwp, 所以它就对应上jdwp.dll.

也就是远程调试时候自动会在启动target VM时候启用jdwp这个代理库.


当明白了代理的作用后,我们来找其的实现。在Sun的JDK中,我们找到了jdwp.dll (Linux环境则是jdwp.so) .  它位于 $JAVA_HOME/jre/bin目录下。我们用exeScope软件打开查看内容:

wKiom1SFSz7xFsInAAJpNug-rho655.jpg

显然,它是Oracle的Sun的JDK提供的Agent ,它提供了2个方法,一个是_Agent_OnLoad(),一个是_Agent_OnUnload() 

wKiom1SFS37Ty0DhAAEzsbfIxTM606.jpg

和我们设想的一致。





总结:

从上过程我们似乎可以总结一些结论:

1. Agent 是在虚拟机启动之时加载的,这个加载处于虚拟机初始化的早期.在这个时间点上:

  所有的 Java 类都未被初始化;所有的对象实例都未被创建; 因而,没有任何 Java 代码被执行; 

(从这点上说,最明显的好处就是它能完成早期调试中用System.out.println()无法解决的问题,因为System.out.println()前提是代码行所在的类已经被初始化过了)

2.但在这个时候,我们已经可以:

操作 JVMTI 的 Capability 参数; 使用系统参数; 动态库被加载之后,虚拟机会先寻找一个 Agent 入口函数.





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1587548,如需转载请自行联系原作者
目录
相关文章
|
设计模式 架构师 Java
阿里P8架构师都要学习研究的java加强版23种设计模式神级PDF文档
说在前面的话 Java作为老牌纯正的编程语言,在规范性上有着天然优势。因此本版的设计模式讲解全部用Java语言来描述,并针对Java语言的特性对讲解内容做了相当大的改动。 不知道大家是否听过编程界的一段话:掌握设计模式相当于华山派的"气宗",是程序员的内功修为,虽然在同样的学习时间下,类似Python这种"剑宗"的开发模式见效更快,但是长远来看,"气宗"才是走向软件架构师以上级别的必由之路。 所以,掌握气宗就掌握了编程命脉,然而学习设计模式有四大境界: 接下来给大家分享的就是java溢彩加强版大话设计模式包含的内容知识点。 总目录 主要内容 本文是百万销量的经典畅销书《
236 0
|
22天前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
56 8
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
1月前
|
机器学习/深度学习 算法 数据可视化
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
本文探讨了在量化交易中结合时序特征和静态特征的混合建模方法。通过整合堆叠稀疏降噪自编码器(SSDA)和基于LSTM的自编码器(LSTM-AE),构建了一个能够全面捕捉市场动态特性的交易系统。SSDA通过降噪技术提取股票数据的鲁棒表示,LSTM-AE则专注于捕捉市场的时序依赖关系。系统采用A2C算法进行强化学习,通过多维度的奖励计算机制,实现了在可接受的风险水平下最大化收益的目标。实验结果显示,该系统在不同波动特征的股票上表现出差异化的适应能力,特别是在存在明确市场趋势的情况下,决策准确性较高。
73 5
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
|
3月前
|
设计模式 前端开发 JavaScript
深入探索研究MVVM架构设计
【10月更文挑战第7天】
61 0
|
8月前
|
缓存 负载均衡 Java
基于微服务架构的后端性能优化研究
基于微服务架构的后端性能优化研究
85 0
|
8月前
|
传感器 机器学习/深度学习 存储
AI - Agent(人工智能代理)架构
AI Agent(人工智能代理)架构
816 0
|
存储 监控 关系型数据库
ELK架构的应用与研究
ELK架构的应用与研究
166 0
|
存储 人工智能 Cloud Native
云原生大数据架构实践与思考-DataFunTalk
导读: 作者:振策-阿里云计算平台-产品解决方案, 20230805 本文将分享当前云原生大数据架构的发展历程/架构定义/核心能力/应用场景及趋势思考。主要包括以下四个部分: - 从大数据上云看架构 - 云原生数据平台的核心能力 - Data+AI with Cloud-Native - 未来趋势与思考
2182 0
|
网络协议 数据可视化 NoSQL
【服务网格架构】Envoy架构概览(8):统计,运行时配置,追踪和TCP代理
【服务网格架构】Envoy架构概览(8):统计,运行时配置,追踪和TCP代理
|
网络协议 数据可视化 NoSQL
Envoy架构概览(8):统计,运行时配置,追踪和TCP代理
Envoy架构概览(8):统计,运行时配置,追踪和TCP代理

热门文章

最新文章