OpenJDK 正在考虑包含异步 API Stack Trace VM 

OpenJDK的

OpenJDK是面向对象语言概念下的Java开发平台的免费版本。

最近 发布了一项提案,以促进 Java 中的异步堆栈跟踪 并且它在 OpenJDK 的 Java 增强过程中蓬勃发展。 该项目旨在定义一个 AsyncGetStackTrace API 以异步收集堆栈跟踪并包含有关 Java 和本机堆栈框架的数据。

根据提案, 不使用 API 时不会影响性能 与现有的 AsyncGetCallTrace API 相比,内存需求不会显着增加。 不建议将新 API 用于生产用途,因为它可能会使 JVM 崩溃。 计划包括通过广泛的测试和验证将此类事件的风险降至最低。

大多数生成器都使用 AsyncGetCallTrace 可用的配置文件,包括开源和商业的,包括 async-profiler。 但它有两个很大的缺点。

  1. 这是一个内部 API,不会在任何标头中导出;
  2. 它只返回有关 Java 帧的信息,即它们的方法和字节码索引。

这些问题使得难以实现分析器和相关工具。 虽然可以通过复杂的代码从 HotSpot VM 中提取额外的信息,但其他有用的信息是隐藏的,无法获取:

已编译的 Java 框架是否在线(目前仅可用于更高编译的框架)。

Java 框架的构建级别(即由 C1 或 C2 编译)。
有关不在堆栈顶部的 C/C++ 框架的信息。

这些日期 在分析和调整虚拟机时很有用 对于给定的应用程序,以及在分析使用大量 JNI 的代码时。

API 将以 APIAsyncGetCallTrace 为模型, 此外,还没有为特定版本的 Java 标准提供新的 API。 Java 的下一个版本是 (JDK) 20,预计在 2023 年 XNUMX 月发布。Java 有一个正式的流程来合并平台更改,该流程已成功响应不断变化的环境,同时实现了高度的稳定性。

Profilers 可以调用此 API 来获取当前执行线程的堆栈跟踪。 从信号处理程序调用此 API 是安全的,并且新实现将至少与 JFR 堆栈跟踪代码一样稳定。 虚拟机填写帧信息和帧数。 API 调用者必须为调用数组分配足够的内存来满足请求的堆栈深度。

虚拟机完成包含图像数组中的实际图像数量或错误代码的跟踪结构。 错误代码是 AsyncGetCallTrace 错误代码的子集。

尽管 API 提供了更多信息,但每帧所需的空间(例如,x16 上的 86 个字节)与现有 APIAsyncGetCallTrace 相同。 返回有关 C/C++ 框架的信息会导致披露实现细节,但对于 AsyncGetCallTrace Java 框架也是如此,因为它们揭示了标准库文件的实现细节并包含本机包装框架。

甚至 有经验的 Java 开发人员可能没有很好的理解 平台是如何开发和维护的。 要吸取的主要教训是,这确实是一个开放的过程。

Java 开发的基础是 Java Community Process (JCP)。 它是一种自我意识的基础文档,定义了如何在平台中引入更改,也允许修改流程本身。 JCP 的最新版本是 2.11,于 2019 年采用。

JCP 规范了 Java 中的新特性和更改是如何被提议、审查和批准的。 (即技术规范),包括人们可以担任的各种角色的定义。 这些角色有助于为 Java 用户社区提供一个参与平台治理的场所。

为了提出新的功能和更改,JCP 允许创建(“初始化”)Java 规范请求(JSR)。 这是通过标准化表格完成的。 要访问该表格,您必须注册一个免费的 JCP 帐户。

从那里开始,我们每天使用的 Java 技术发生了许多变化,无论大小。 当 JSR 到达时,它会进入 JSR 审核流程。 这是一个多步骤的过程,在此过程中,JSR 中提出的更改会逐渐被更加认真地考虑、修改,并最终被采纳或终止。

最后 如果您有兴趣了解更多有关它的信息,您可以查看详细信息 在下面的链接中。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。