【发布时间】:2010-12-03 15:29:23
【问题描述】:
在 rt.jar 中修改类有什么限制。我意识到这通常特定于 JRE 的版本和供应商。例如,我发现 Sun 1.6 VM 中的 Hotspot 不喜欢向 java.lang.Object 添加字段,因为它对 Object 的大小进行了硬编码假设。但是,如果我修改 rt.jar 中类的重要部分,对于肯定在我的 jar 中的类,我会在运行时得到虚假的 ClassNotFoundErrors。我已经尝试修改 rt.jar 并用各种 -Xbootclasspath 参数取代它。
我真的不知道在哪里可以找到关于这类事情的文档,例如,我在 OpenJDK 文档中找不到任何内容。
【问题讨论】:
-
我很好奇您这样做的原因?
-
向 Object 添加一个字段会消耗大量内存空间和垃圾回收时间。
-
我也很好奇您为什么觉得需要编辑基类。除了在 JDK 类中构建不可移植的更改之外,可能还有另一种解决问题的方法。
-
如果您确实确定要编辑基类,您是否检查过是否可以使用 AspectJ 或如 Amir 所说的使用 ASM 实现您想要的? eclipse.org/aspectj
-
我正在尝试为所有字段写入添加写时复制语义,以便它们可以自动检查点和回滚。
标签: java internals jvm-hotspot