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

简介:

引入:

上篇文章讲解了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,如需转载请自行联系原作者
目录
相关文章
|
人工智能 运维 安全
配置驱动的动态 Agent 架构网络:实现高效编排、动态更新与智能治理
本文所阐述的配置驱动智能 Agent 架构,其核心价值在于为 Agent 开发领域提供了一套通用的、可落地的标准化范式。
5488 122
|
12月前
|
人工智能 安全 数据可视化
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
本文系统性地提出并阐述了一种配置驱动的独立运行时Agent架构,旨在解决当前低代码/平台化Agent方案在企业级落地时面临困难,为Agent开发领域提供了一套通用的、可落地的标准化范式。
822 18
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
|
机器学习/深度学习 人工智能 自然语言处理
清华EconAgent获ACL 2024杰出论文:大模型智能体革新计算经济学研究范式
近年来,人工智能的迅猛发展推动了数据驱动建模在宏观经济学领域的应用。清华大学研究团队提出的EconAgent模型,基于大型语言模型,具备类似人类的决策能力,能更准确地模拟个体行为对宏观经济系统的影响。EconAgent在个体异质性、市场动态及宏观经济因素模拟方面表现出色,并具有更好的可解释性和灵活性。然而,其高计算复杂度和部分决策过程的不透明性仍需进一步解决。该成果已在ACL 2024会议上获得杰出论文奖。论文链接:https://arxiv.org/abs/2310.10436v4
803 3
|
机器学习/深度学习 算法 决策智能
北大领衔,多智能体强化学习研究登上Nature子刊
北京大学研究团队近日在《Nature》子刊上发布了一篇关于多智能体强化学习(MARL)的论文,提出了一种高效且可扩展的MARL框架,旨在解决大规模网络控制系统中的决策问题。该框架实现了智能体间的局部通信,减少了通信成本与计算复杂度,并在交通、电力及疫情防控等多个真实场景实验中,显著提升了决策性能。论文链接:https://www.nature.com/articles/s42256-024-00879-7。尽管该研究仍存局限,但为MARL的应用提供了新思路。
634 2
|
人工智能 数据可视化 开发者
深度解析基于LangGraph的Agent系统架构设计与工程实践
LangGraph作为Agent 生态中非常热门的框架,今天我将借助 LangGraph,更高效、更优雅的方式构建复杂智能体系统。
2909 2
|
存储 人工智能 前端开发
Google揭秘Agent架构三大核心:工具、模型与编排层实战指南
本文为Google发布的Agent白皮书全文翻译。本文揭示了智能体如何突破传统AI边界,通过模型、工具与编排层的三位一体架构,实现自主推理与现实交互。它不仅详解了ReAct、思维树等认知框架的运作逻辑,更通过航班预订、旅行规划等案例,展示了智能体如何调用Extensions、Functions和Data Stores,将抽象指令转化为真实世界操作。文中提出的“智能体链式组合”概念,预示了未来多智能体协作解决复杂问题的革命性潜力——这不仅是技术升级,更是AI赋能产业的范式颠覆。
3520 1
|
人工智能 自然语言处理 安全
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
CodeAct是一种先进的AI辅助系统范式,深度融合自然语言处理与代码执行能力。通过自定义代码执行代理,开发者可精准控制代码生成、执行及管理流程。本文基于LlamaIndex框架构建CodeAct Agent,解析其技术架构,包括代码执行环境、工作流定义系统、提示工程机制和状态管理系统。同时探讨安全性考量及应用场景,如软件开发、数据科学和教育领域。未来发展方向涵盖更精细的代码生成、多语言支持及更强的安全隔离机制,推动AI辅助编程边界拓展。
945 3
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
|
存储 人工智能 自然语言处理
Cursor这类编程Agent软件的模型架构与工作流程
编程Agent的核心是一个强大的大语言模型,负责理解用户意图并生成相应的代码和解决方案。这些模型通过海量文本和代码数据的训练,掌握了广泛的编程知识和语言理解能力。
1447 1
|
机器学习/深度学习 人工智能 安全
北大领衔,多智能体强化学习研究登上Nature子刊
【10月更文挑战第1天】近日,北京大学领导的研究团队在《Nature》子刊上发表了一篇关于多智能体强化学习的论文,提出了一种高效且可扩展的框架,解决了大规模网络控制系统中的决策问题。该框架通过局部通信避免了集中式和独立学习的缺点,在交通、电力等领域的实验中展现了卓越性能。然而,其在更复杂系统中的效果及计算复杂度仍需进一步验证。论文链接:https://www.nature.com/articles/s42256-024-00879-7。
535 3