Java 调用堆栈检查和操作
我的问题是:是否有可能(以任何方式)在运行时分析和修改调用堆栈(帧内容和堆栈内容)?
我正在寻找任何可能性 - 低级,不安全或内部API,编写C扩展的可能性等。唯一的约束:它应该在标准运行时中可用,无需调试或分析模式。这就是我做研究“有可能吗?”,而不是“这是个好主意吗?”。
我想从一个帧中收集所有本地数据,将其存储在某个位置,然后从堆栈中删除该帧,以便以后可以恢复它。实际上,这为我们提供了JVM的延续,它们将允许快速异步框架(如python中的gevents)和生成器结构(如python中的那些)出现。
这可能看起来像重复的问题,但我只找到了用“使用”或“应该用调试工具完成”来回答的问题。有与我类似的问题,但它只在询问者想要做什么(在异步计算上工作)的背景下得到回答,而我需要更一般的(面向java堆栈)的答案。这个问题也类似,但和以前一样,它专注于并行化,答案也集中在并行化上。Thread.currentThread().getStackTrace()
我再说一遍:这是提出新语言功能提案的研究步骤。我不想冒险破坏JVM中的任何东西 - 我正在寻找可能性,然后我将分析可能的风险并寻找它们。我知道手工操纵堆栈是丑陋的,但是创建省略的conrtuctor的实例也是如此 - 它是淫秽的基础。肮脏的黑客可能是肮脏的,但它们可能有助于引入一些很酷的东西。
PS.我知道类星体和光狼存在,但是,如上所述,这些都是以并发为中心的框架。
编辑
小小的澄清:我正在寻找与未来的JVM和库版本兼容的东西。最好我们谈论的是被认为是稳定的公共API的东西,但是如果解决方案在于内部的东西,但几乎是标准的,或者在内部之后成为标准(如sun.misc.Unsafe) - 那也会这样做。如果只能通过仅使用C JVM API的C扩展来实现 - 那没关系。如果这可以通过字节码操作来实现 - 那也没关系(我认为ASM可能是可能的)。