如何使用 JVMTI 代理重新转换没有进一步调用的执行方法?

2023-12-26

我在运行时出于各种目的检测类文件。为此,我使用了 JVMTI 代理。我检测方法的策略是调用RetransformClasses要调用的函数ClassFileLoadHook。此策略适用于在检测后进行任何进一步调用的所有方法,因为实际检测发生在后续函数调用时,但它不适用于任何没有进一步调用的方法,例如main程序中的函数。

我想在执行过程中动态检测方法。我想要一些程序,例如检测代码的堆栈替换(OSR)。 JVMTI 或任何其他方法中是否有可用的策略???

PS:如果有帮助的话,我愿意编辑/修补 OpenJDK 源代码。


经过进一步的思考,我believe你所要求的东西在技术上可能(也许!)是可能的;但需要付出很多努力;但概念上这不是一个好方法。

I assume你的要求实际上是你想要仪器any一种向您抛出的应用程序,目的是通过“幕后并行化”来提高其性能。

因此,我主要有一系列的担忧,而不是真正的解决方案:

  • 首先,如果您想修改已经触发的方法现在执行后,您不仅仅是在谈论仪器。你真正想要做的是提供你自己的“JIT”机制——而 JVM JIT 也在那里,并且在做它的工作。
  • 所以,如果你真的认真对待这件事;并且想要确保即使是任何事情main()可以从你的优化中受益 - 那么我认为,从概念上讲,你最好设计和实现你的own然后是 JVM。
  • 然后我就纳闷了:你说要盖main()已经运行“长时间循环”的方法。听起来你打算修复糟糕的设计把你的仪器扔给它。我认为更明智的方法是:研究此类应用程序,然后improve他们的设计。
  • 从某种意义上说:如果“并行化”任意应用程序“那么容易”——无论如何它都会成为 JVM 的一部分。但事实并非如此; JVM 不进行此类优化是有充分理由的:它可能是超级难以获得正确和稳健的结果。

换句话说:我guess你有一个 XY 问题; X 问题是您正在处理的应用程序可以从“并行化”中受益。但这是“一般而言”很难做到的事情。

从这个意义上说;我宁愿定义某种架构(可能包括应用程序应如何“启动”的特定的、定义明确的步骤;以便您的仪器可以成功地完成其工作)并首先获得该方法的经验。含义:告诉你的人们不要将“长时间运行的循环”放入他们的main()首先(如前所述;对我来说,仅此一点听起来就很糟糕!)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JVMTI 代理重新转换没有进一步调用的执行方法? 的相关文章

随机推荐

  • 从深层嵌套的 JSON 结构中提取值

    这是我从其他地方获得的结构 即深度嵌套字典的列表 foo code 404 foo rbody query info acme no 444444 road runner 123 error no lunch message runner
  • 根据值或空白隐藏 Google 电子表格中的空白行

    我正在尝试获取一个脚本 能够隐藏没有数据的行或返回空白结果 我不知道该怎么做 这里用截图做一些解释 剧本应该从第27行开始 在那个例子中 我想先隐藏 第 36 37 38 行 第二 我想根据没有数据的 L 列隐藏第 49 57 行 里面有公
  • 更改属性名称

    我有一个 JavaScript 对象 如下所示 var a Prop1 test Prop2 test2 我将如何改变属性名称 of Prop1 to Prop3 我尝试了以下代码 但它不起作用 for var p in r p prope
  • Kubernetes 服务的 LoadBalancer 和外部 IP 类型有什么区别

    我正在使用 Kubernetes 服务 但我对以下参数有点困惑外部IP服务中 如果存在路由到一个或多个集群节点的外部 IP 则可以在这些外部 IP 上公开 Kubernetes 服务 在服务端口上使用外部 IP 作为目标 IP 进入集群的流
  • 在Ruby中检测上传文件的MIME类型

    是否有一种防弹方法可以在 Ruby 或 Ruby on Rails 中检测上传文件的 MIME 类型 我正在使用 SWFupload 上传 JPEG 和 PNGcontent type总是 application octet stream
  • 如何将图像添加到 PDF 的所有页面?

    我一直在尝试使用 itextsharp 将图像添加到所有页面 图像需要覆盖每个页面的所有内容 我在所有其他代码下面使用了以下代码doc add Document doc new Document iTextSharp text PageSi
  • Android/RoboGuice/Maven:Eclipse 中的 ClassNotFoundException,但不是来自 Maven 命令行

    我有一个处理 Guice 绑定的类 这是需要运行的第一个东西 称为 ApplicationAutoworkout java package com redsoft android autoworkout import java util L
  • 阅读文件的注释

    有些文件的属性中有 摘要 选项卡 此选项卡包括标题 作者 注释等信息 C 有没有办法读取文件的注释 我必须只读取 jpg 等图像文件的注释 评论和其他答案是搜索的好地方 这里有一些完整的代码可以帮助您 确保您参考shell32 dll首先和
  • C# CA2104 - 自动代码分析不喜欢静态只读可变类型

    我有这样的代码 public abstract class Base is going to be used in deriving classes let s assume foo is threadsafe protected stat
  • AWS Step Function 中的 lambda 能否知道 AWS Step Function 的当前执行 ID?

    对于在步骤函数中执行的 lambda 我想知道其中 AWS 状态机的当前执行 id 有没有办法在步骤函数中知道这一点 老问题 但答案已经过时了 你现在可以在步骤函数中得到这个 使用 Execution id 我正在使用的示例 run tas
  • VHDL 类型转换 - 找到 4 种可能的定义

    我正在尝试将两个 std logic 位转换为整数 如下所示 LIBRARY IEEE USE IEEE std logic 1164 ALL USE IEEE numeric std ALL ENTITY TEST IS PORT sw1
  • mongodb写锁发生在什么级别?

    我开始研究一个项目的技术 该项目可能会频繁进行大型写入 我想知道 mongo 写锁发生在什么级别 是在服务器级别还是数据库级别 我读过了http www mongodb org display DOCS How does concurren
  • 使用日期时间筛选器构建 LINQ to Entities 表达式树

    我正在尝试完成 Todd Sprang 提供的动态查询的实现 请参阅此link https www codeproject com Articles 493917 Dynamic Querying with LINQ to Entities
  • 使用 Apache 的 HttpClient 与使用 JDK 的 URLConnection 从小程序内连接到 URL

    在下面的代码中 我已经验证 如果使用 JDK 的 URLConnection 类 则从小程序内连接到 URL 会保留浏览器的会话 但是 如果使用 Apache 的 HttpClient 库 则情况并非如此 有谁知道为什么 或者 有没有办法让
  • GitHub CLI 客户端 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想更多地通过命令行使用 GitHub 而不是通过网络 当然 与Git repos相关的一切都可以通过
  • 无法创建目录 /var/teamsserver

    我已经在我的 mac 上安装了 os x server Mavericks 并且想添加机器人 由于某些原因 我的远程存储库位于其他外部服务器上 我可以通过指定端口上的用户名和密码访问它 我已经将远程存储库添加到 os x 服务器 如下所示
  • 如何将字符串转换为枚举?

    我正在尝试在 PowerShell 中将字符串转换为枚举值 但在任何地方都找不到它 我得到一个 JSON 结果 我只想使用定义为字符串的 Healthstate enum HealthState Invalid 0 Ok 1 Warning
  • 如何在没有用户名和密码的情况下验证移动应用程序?

    我正在构建一个使用 OpenId 来验证用户身份的 Web 应用程序 就像 Stackoverlfow 所做的那样 也会有一个移动应用程序 例如安卓或iPhone 这些应用程序必须以某种方式进行身份验证或登录 才能访问数据并更新属于用户的内
  • iPhone - 在 UIView 上绘制透明矩形以显示下面的视图

    我目前有两个 UIView 一个是红色背景 另一个是蓝色 蓝色视图是红色视图的子视图 我想做的是能够在蓝色视图上 剪切 出矩形 以便红色视图可见 你打算怎样做呢 您必须覆盖顶视图的drawRect方法 因此 例如 您可以创建一个HoleyV
  • 如何使用 JVMTI 代理重新转换没有进一步调用的执行方法?

    我在运行时出于各种目的检测类文件 为此 我使用了 JVMTI 代理 我检测方法的策略是调用RetransformClasses要调用的函数ClassFileLoadHook 此策略适用于在检测后进行任何进一步调用的所有方法 因为实际检测发生