我对修补核心 Java 类感兴趣。
一般来说,String
、Graphics
(Swing) 等数据类型以及来自 lib/rt.jar
的类。
所以在我看来,有几种方法可以做到这一点:
- 创建自定义类并将它们包含在 JVM 中,然后使用
-Xbootclasspath
运行 jvm - 编写一个新的引导加载程序,它将 Java 代码插入到自定义类中
- 在加载时使用代理和仪器字节码(对此不太熟悉)
我想听听您对这些方法的建议/意见,也许我遗漏了一些东西?
最佳答案
使用引导类路径更改此类类可能会违反您的许可协议(protocol)。 (如果您担心的话)更改字节码似乎是允许的。
更改系统类的另一种方法是将 jar 添加到 jre/lib/endorsed
目录(您必须创建该目录),它将优先加载此处的任何内容,而不是其他 jar。
更改 String 类可能会混淆 -XX:UseCompressedStrings
选项。您可能想测试进行任何更改后会发生什么情况。
我在测试中这样做是为了从系统中获得额外的分析。我还没有尝试更改这些类以供生产使用。
我怀疑您尝试做的任何事情都可能以另一种方式完成,但如果没有更多细节,就不可能说。
关于java - 自定义 Java 核心类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901539/