JPDA 架构研究8 - Agent利用环境指针访问VM(堆栈管理篇)

简介:

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

引入:

上篇文章讲解了Agent利用环境指针访问VM的线程组操作,这里讨论下堆栈操作。


分类4:堆栈操作

a. GetStackTrace.获取某线程的堆栈。

jvmtiError
GetStackTrace(jvmtiEnv* env,
            jthread thread,
            jint start_depth,
            jint max_frame_count,
            jvmtiFrameInfo* frame_buffer,
            jint* count_ptr)

入参thread表示要分析的线程,如果不设置值则为当前线程。start_depth表示要分析的起始深度,0表示当前frame,1 表示调用者的frame,2表示调用者的调用者的frame. max_frame_count表示最大frame数。返回frame_buffer包含了巨大的想要的堆栈信息。


b.GetAllStackTraces.获取所有活着的线程的堆栈信息。

jvmtiError
GetAllStackTraces(jvmtiEnv* env,
            jint max_frame_count,
            jvmtiStackInfo** stack_info_ptr,
            jint* thread_count_ptr)

所有活着的线程的堆栈信息数组被放在返回值stack_info_ptr中。


c.GetThreadListStackTraces。获取给定线程列表的堆栈信息。

jvmtiError
GetThreadListStackTraces(jvmtiEnv* env,
            jint thread_count,
            const jthread* thread_list,
            jint max_frame_count,
            jvmtiStackInfo** stack_info_ptr)


d.GetFrameCount.获取给定线程调用堆栈中的当前帧数。

jvmtiError
GetFrameCount(jvmtiEnv* env,
            jthread thread,
            jint* count_ptr)


e.PopFrame.弹出给定线程堆栈的最上层的frame.

jvmtiError
PopFrame(jvmtiEnv* env,
            jthread thread)

这时候

(1)当前的frame就会被丢弃而之前的frame就会成为当前的frame.

(2)运算子(operand)的堆栈被恢复。

(3)操作码(opcode)恢复到之前的调用指令。


f.GetFrameLocation.返回当前执行的指令frame的位置。

jvmtiError
GetFrameLocation(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jmethodID* method_ptr,
            jlocation* location_ptr)

从返回可以看出,这个返回位置包含深度,方法指针,位置指针。


g.NotifyFramePop. 当某Frame从堆栈中弹出时候,产生一个FramePop事件。

jvmtiError
NotifyFramePop(jvmtiEnv* env,
            jthread thread,
            jint depth)





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1587697,如需转载请自行联系原作者
目录
相关文章
|
15天前
|
人工智能 API 决策智能
【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑
【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑
22 0
|
2月前
|
消息中间件 存储 SQL
Flume【基础知识 01】简介 + 基本架构及核心概念 + 架构模式 + Agent内部原理 + 配置格式(一篇即可入门Flume)
【2月更文挑战第18天】Flume【基础知识 01】简介 + 基本架构及核心概念 + 架构模式 + Agent内部原理 + 配置格式(一篇即可入门Flume)
492 0
|
7月前
|
设计模式 架构师 Java
阿里P8架构师都要学习研究的java加强版23种设计模式神级PDF文档
说在前面的话 Java作为老牌纯正的编程语言,在规范性上有着天然优势。因此本版的设计模式讲解全部用Java语言来描述,并针对Java语言的特性对讲解内容做了相当大的改动。 不知道大家是否听过编程界的一段话:掌握设计模式相当于华山派的"气宗",是程序员的内功修为,虽然在同样的学习时间下,类似Python这种"剑宗"的开发模式见效更快,但是长远来看,"气宗"才是走向软件架构师以上级别的必由之路。 所以,掌握气宗就掌握了编程命脉,然而学习设计模式有四大境界: 接下来给大家分享的就是java溢彩加强版大话设计模式包含的内容知识点。 总目录 主要内容 本文是百万销量的经典畅销书《
129 0
|
8月前
|
存储 缓存 Kubernetes
基于 ACK Fluid 的混合云优化数据访问(一):场景与架构
基于 ACK Fluid 的混合云优化数据访问(一):场景与架构
|
9月前
|
存储 监控 关系型数据库
|
9月前
|
存储 人工智能 Cloud Native
云原生大数据架构实践与思考-DataFunTalk
导读: 作者:振策-阿里云计算平台-产品解决方案, 20230805 本文将分享当前云原生大数据架构的发展历程/架构定义/核心能力/应用场景及趋势思考。主要包括以下四个部分: - 从大数据上云看架构 - 云原生数据平台的核心能力 - Data+AI with Cloud-Native - 未来趋势与思考
1379 0
|
10月前
|
Linux Anolis 异构计算
关于远程直接内存访问技术 RDMA 的高性能架构设计介绍
本文介绍 RDMA 技术的基本原理及交流在工程上的设计思路。
|
11月前
|
数据采集 存储 负载均衡
大数据数据采集的数据采集(收集/聚合)的Flume之架构模式的并联Agent
在Flume中,架构模式是数据采集和传输过程中最核心的部分。Flume支持多种不同的架构模式,其中并联Agent架构模式是一种比较常见的模式。
97 0
|
12月前
|
数据采集 存储 监控
大数据数据采集的数据采集(收集/聚合)的Flume之架构模式的串联Agent
在Flume中,架构模式是数据采集和传输过程中最核心的部分。Flume支持多种不同的架构模式,其中串联Agent架构模式是一种比较常见的模式。
56 0
|
19小时前
|
API 持续交付 开发者
构建高效微服务架构:后端开发的新视角
【5月更文挑战第8天】 随着现代软件开发的演变,微服务架构已经成为了企业追求敏捷、可扩展和灵活部署的重要解决方案。本文将深入探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术栈选择以及持续集成与部署的最佳实践。我们还将讨论微服务带来的挑战,如数据一致性、服务发现和网络延迟,并提出相应的解决策略。通过本文,后端开发者将获得构建和维护微服务系统所需的深度知识,并了解如何在不断变化的技术环境中保持系统的健壮性和可维护性。
14 8

热门文章

最新文章

http://www.vxiaotou.com