OpenJDK 考虑 Java 的异步堆栈跟踪

一项在 Java 中促进异步堆栈跟踪的提案正在通过 OpenJDK 的 Java 增强过程推进。

该计划,Asynchronous Stack Trace VM API,将定义一个 AsyncGetStackTrace 用于异步收集堆栈跟踪并包含有关 Java 和本机堆栈帧的数据的 API。 努力的目标包括为分析器提供经过良好测试的 API,它将获取 Java 本机堆栈帧信息,并支持异步使用,例如从信号处理程序调用。

根据提案,当 API 未被使用时性能不会受到影响,并且与现有的相比,内存需求不会显着增加 AsyncGetCallTrace 应用程序接口。 不建议将新 API 用于生产,因为它可能会使 JVM 崩溃。 计划要求通过广泛的测试和模糊测试将这种情况的可能性降到最低。

现在, AsyncGetCallTrace 被大多数可用的分析器使用,包括开源和商业分析器,包括异步分析器。 但它有两个主要缺点。 它是一个内部 API,不在任何标头中导出,它只返回有关 Java 框架的信息,即它们的方法和字节码索引。 这些问题使得实施分析器和相关工具更加困难。 虽然可以通过复杂的代码从 HotSpot VM 中提取额外的信息,但其他有用的信息仍然被隐藏,例如编译的 Java 框架是否内联,Java 框架的编译级别,以及不在顶部的 C/C++ 框架的信息堆栈。 此数据有助于为给定应用程序分析和调整 VM,以及分析大量使用 JNI(Java 本机接口)的代码。

AsyncGetStackTrace API将仿照 AsyncGetCallTrace 应用程序接口。 尚未针对特定版本的标准 Java 提出新的 API。 Java 的下一个版本是 Java Development Kit (JDK) 20,预计在 2023 年 3 月发布。

阅读更多

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注