ByteBuddy:修改已加载架构的解决方法 class

ByteBuddy: Workaround for modifying schema of loaded class

问题:我们使用 ByteBuddy 生成 classes,加载它们并且在某一时刻需要 add/remove 字段而无需重新启动应用程序。

如果我理解正确,在 Java 中无法修改已经加载到 class 加载程序中的 class 的架构(添加 fields/methods)。

我的问题:作为解决方法,当发生此类冲突时,是否可以 possible/reasonable 创建一个新的 class 加载程序 - 将所有生成的 class 加载到新的class 加载程序并关闭旧的 class 加载程序?

谢谢。

有一个 VM 版本的 OpenJDK 支持这种转换,Dynamic Code Evolution VM

对于常规 VM,您可以在新的 class 加载程序中加载 class。但是,在这种情况下,先前的实例将不会是此更改 class 的实例。您需要重新创建所有实例。如果这对您来说可行,这是一个选择。