在.Net 中,您似乎不能
- 动态编译代码
- 直接调用已编译的代码(即没有“远程处理”、编组等)和
- (仅)从内存中删除已编译的代码
您必须在 2.(通过将代码生成到调用 AppDomain 本身)或 3.(通过将代码生成到一次性 AppDomain)之间做出决定,但您不能同时拥有两者。
现在我很好奇这在Java中是否可行。我对 ClassLoaders 知之甚少,但似乎在 Java 中我可以
- 将代码动态编译成一次性类加载器
- 直接调用已编译的代码(例如,通过对预定义接口的虚拟方法调用),无需任何封送处理
- 删除对已编译类和一次性类加载器的所有引用,以便 GC 负责删除
这个假设有效吗?