Java 修改rt.jar的限制

Java 修改rt.jar的限制,java,internals,jvm-hotspot,Java,Internals,Jvm Hotspot,在rt.jar中修改类时有哪些限制。我意识到这通常是特定于JRE的版本和供应商的。例如,我发现Sun 1.6 VM中的Hotspot不喜欢在java.lang.Object中添加字段,因为它对对象的大小有硬编码的假设。然而,若我修改rt.jar中类的重要部分,那个么对于肯定在我的jar中的类,我会在运行时得到虚假的ClassNotFoundErrors。我尝试过就地修改rt.jar,并用各种-Xbootclasspath参数替换它 我真的不知道在哪里可以找到这类文档,例如,我在OpenJDK文档

在rt.jar中修改类时有哪些限制。我意识到这通常是特定于JRE的版本和供应商的。例如,我发现Sun 1.6 VM中的Hotspot不喜欢在java.lang.Object中添加字段,因为它对对象的大小有硬编码的假设。然而,若我修改rt.jar中类的重要部分,那个么对于肯定在我的jar中的类,我会在运行时得到虚假的ClassNotFoundErrors。我尝试过就地修改rt.jar,并用各种-Xbootclasspath参数替换它


我真的不知道在哪里可以找到这类文档,例如,我在OpenJDK文档中找不到任何东西。

您是否考虑过使用字节码指令库来实现您想要的功能?您可以使用+,因为JDK大于或等于5.0

我很好奇您这样做的原因?向对象添加字段将花费您大量的内存空间和垃圾收集时间。我也很好奇您为什么需要编辑基类。除了将不可移植的更改构建到JDK类中之外,可能还有另一种解决问题的方法。如果您真的确定要编辑基类,您是否检查了是否可以使用AspectJ或Amir所说的使用ASM实现您想要的目标?我正在尝试将写时复制语义添加到所有字段写入中,这样它们就可以被自动检查并回滚。事实上,这正是我正在做的。问题是,我无法使用这种技术获取某些核心类,因为在我运行检测代码时,它们已经被加载。我的退路是预先修改这些类(或整个rt.jar),这就是我遇到麻烦的地方