【问题标题】:Java - instrumenting the Garbage Collector?Java - 检测垃圾收集器?
【发布时间】:2018-04-27 07:29:53
【问题描述】:

是否可以将字节码注入垃圾收集器? 我有一种预感,答案是“不”,但我似乎在网上找不到任何关于它的信息。

【问题讨论】:

  • 你想用垃圾收集器做什么?
  • @UweAllner 某种自定义对象/字段内联。与dl.acm.org/citation.cfm?id=583829 类似,只是更简单且更受限于特定用例。
  • 内联需要改变代码生成器/优化器而不是垃圾收集器。
  • @Holger 哎呀,你说得对,我不小心把网址复制了一个条目。这应该是正确的:dl.acm.org/citation.cfm?id=1356061

标签: java garbage-collection bytecode instrumentation bytecode-manipulation


【解决方案1】:

不,这是不可能的。 JVM 的垃圾收集器是用 C 实现的。

您可以通过下载 OpenJDK 源代码、修改和构建它来检测 GC。

【讨论】:

  • 诚然,这不是我的专业领域。您能否在运行时通过从 Java 程序中调用本机代码来操作它?
  • 不。您不能在运行时修改 GC 代码。你可以……当然……下载 OpenJDK 源代码,修改它,然后构建它。
【解决方案2】:

无法将字节码注入 GC。字节码和 GC 是两个相关的领域,但不在一个层次。字节码是一种高级语言,而 VM(例如 IBM J9 和 Hotsppot)的 GC 处于较低级别,并且主要以 C/C++/ 语言实现。字节码解释通常通过 JNI 调用转换为本机代码执行。

对象内联是一种运行时优化,它的定义不止一种。和Christian的工作类似,我也做了很多object inlining,这和Christian对Hotspot的优化不同。你可以看看https://dl.acm.org/citation.cfm?id=3141874

由于运行时优化和 GC 是 VM 中的两个关键主题,研究人员通常会找出正在执行的优化和其他测量之间的影响。这可能是您提出问题的动机以及 Christan 作品中的对象内联。

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2011-01-06
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多