【发布时间】:2011-05-23 16:49:07
【问题描述】:
我有一个应用程序,其目的是在跨文件系统的许多不同 jar 文件中调用同一类中的相同特定方法并接收结果。所以我可以保证某个类和方法会存在于一个jar文件中。
我知道每个 jar 文件的位置。我很容易通过反射来实例化类并以这种方式调用方法。
我的问题是我有很多这些 jar 文件。如果我使用上述方法调用每个 jar,我担心我的应用程序的内存消耗会急剧增加,因为我必须为每次调用加载整个 jar 文件。
除了反射之外,我还有什么方法可以调用这些 jars 文件?系统调用不起作用,因为我需要接收一个值。
非常感谢...
【问题讨论】:
-
出于兴趣,如何在代码中从不同的 jar 文件中加载同一个类?
-
您是否考虑过使用单独的类加载器并在最后处理它?我认为这就是容器进行 .jar 管理 (Tomcat) 的方式。
-
@DaveHowes - 我只是创建了一个本地 URLClassloader,其中包含我感兴趣的 jar 文件的 URL。然后我使用 Class.ForName() 等。
-
@Rekin - 是的,我使用本地 URLClassloader,它在调用完成后超出范围。然而此时,我感兴趣的 jar 已经加载完毕。它还会留在记忆中吗?
-
@Belltower: AFAIK 类定义直接进入 perm gen 空间,这很少被扫除,但有时仍然如此。当没有任何东西引用它们时,就没有理由保留它们。也许 Jochen 可以纠正我。
标签: java reflection jar execution