我有一个应用程序需要能够在不停止和重新启动的情况下更新自身的一部分(一次一个类)。使用 JavaCompiler API,可以直接生成修改后的类源代码、重新编译、加载和实例化类。我可以在内存中完成这一切(没有从磁盘或网络读取文件)。
应用程序永远不会实例化这样一个类的多个对象。该对象只会有两个或三个引用。当修改后的类被加载并实例化时,所有这些引用都将更改为新对象。我还可以保证在加载修改后的类时,受影响的类中没有任何方法在另一个线程中运行。
我的问题是:我的类加载器在加载与之前加载的类同名的修改类时会遇到问题吗?
如果我没有在类加载器中显式实现加载类的缓存,那会避免问题吗?还是委托给父类加载器仍然会导致问题?
我希望使用我的类加载器的单个实例,但如果有必要,我可以在每次更新类时实例化一个新实例。
注意:我查看了 OSGI,它似乎比我需要的要多得多。