如何在jar文件上远程执行方法

时间:2011-05-23 16:49:07

标签: java reflection jar execution

我有一个应用程序,其目的是在同一个类中调用分布在文件系统中的许多不同jar文件中的相同特定方法并接收结果。所以我可以保证jar文件中存在某个类和方法。

我知道每个jar文件的位置。我很容易通过反射实例化类并以这种方式调用方法。

我的问题是我有很多这些jar文件。如果我使用上面的方法调用每个jar,我担心我的应用程序的内存消耗将急剧增加,因为我将不得不为每个调用加载整个jar文件。

除了反射,我有什么方法可以调用这些jar文件?系统调用不会工作,因为我需要收回一个值。

非常感谢......

2 个答案:

答案 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(...);