gpt4 book ai didi

java - 我可以用新的字节码重新加载一个类吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:30 25 4
gpt4 key购买 nike

是否有可能以某种方式在类加载器中重新加载类字节码实现?我正在尝试在运行时向类添加方法。

最佳答案

不,您不能在任何类加载器中重新加载一个类。

您可以做的是编写并使用自定义类加载器来加载该类的第一个版本。当你想更新这个类时,你会处理第一个类的每个实例、它的 Class<> 对象的每个实例,以及加载第一个版本的类加载器的实例。这是在 JVM 中卸载类的唯一方法——当 GC 收集所有这些东西(类的实例、Class<> 对象和加载类的 ClassLoader 的实例)时,它将被卸载。

然后,您实例化一个新的类加载器并加载您的类。

这类似于 Servlet 容器(例如 Tomcat)动态加载和卸载应用程序所做的事情。

如果您只是想动态地添加方法,那么我之前使用过一种非常有趣的类似方法:您可以使用与类加载器相关联的 Java Compiler API。您将类的“代码”传递给您的类加载器,它将调用 Java 编译器(如果需要,可以在内存中:您不需要在磁盘上写入任何文件),并使用类加载器加载已编译的字节码。在任何情况下,如果您希望卸载这样加载的类,您将不得不丢弃类加载器,就像我上面描述的那样。

关于java - 我可以用新的字节码重新加载一个类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15071701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com