我有一个应用程序,其目的是在同一个类中调用分布在文件系统中的许多不同jar文件中的相同特定方法并接收结果。所以我可以保证jar文件中存在某个类和方法。
我知道每个jar文件的位置。我很容易通过反射实例化类并以这种方式调用方法。
我的问题是我有很多这些jar文件。如果我使用上面的方法调用每个jar,我担心我的应用程序的内存消耗将急剧增加,因为我将不得不为每个调用加载整个jar文件。
除了反射,我有什么方法可以调用这些jar文件?系统调用不会工作,因为我需要收回一个值。
非常感谢......
答案 0 :(得分:3)
你可能会遇到烫发空间问题,但可以通过-XX:MaxPermSize=
来增加
参数。
确保为每个JAR文件使用单独的URLClassLoader,并且不要保留它们以便它们可以获得GCd。 通过新的URLClassLoader加载JAR文件,然后使用Class.forName()加载。
祝你好运!答案 1 :(得分:1)
我会做类似这样的伪代码:
foreach jf : myJarFiles
jcl = new JarClassLoader(jf);
Class.forName(myClassName);
m = MyClass.getMethod(...);
m.invoke(...);