Java:在同一JVM中在运行时获取类的字节码


问题内容

我为Clojure添加了耐用性,最后我可以添加函数了。在Clojure中,使用调用方法(以及其他方法)将字节字节编译为类。这样,功能就是一流的。为了使这些持久化,我需要序列化和反序列化这些类。如何在不访问.class文件的情况下获取类的字节码?

如果我弄错了,请纠正我,但是使用代理程序需要产生一个单独的VM,并且该代理程序连接到第一个VM。我需要从同一台VM执行此操作。

仅使用Serializable设置和获取Class对象是不够的。反序列化后,我需要加载该类,并且在后续的VM实例上,可能会发生类名冲突。我需要修改字节码,以在反序列化/类加载时将类重命名为唯一的名称。


问题答案:

您可以编写自己的代码,ClassLoader并破解一个在加载类时记录字节码的方案。

您将需要重写findClass以自己找到该类文件,将其加载到内存中,将数据保存在某处(以供以后序列化),然后调用defineClass以在JVM中定义该类。