在多个类加载器之间共享java类

时间:2018-05-25 19:48:20

标签: java classloader

我有一个用例,我需要在多个类加载器之间动态加载和共享一组预定义的包/类。我们的目标是在每次加载jar文件时提高整体性能。

我们正在尝试加载和执行" apps"。每个应用都包含我们的SDK库。每个加载的应用程序都在其自己的URLClassLoader中完成,以使其与其他代码隔离,以及防止库版本冲突。由于我们的SDK库位于每个应用程序中,我们希望缓存这些特定的包/类集,以便下次加载另一个应用程序时,不需要再次加载所有SDK类,从而消除了这些开销

由于我们有多个版本的SDK,我们正在尝试动态执行此操作。这样,当加载应用程序时,我们已经知道它是什么版本的SDK。所以我们想要一些特定于这个sdk版本的父类加载器的实现(我们将其称为SDKCacheClassLoader)。当URLClassLoader(或它的某个自定义子类)从sdk加载并识别包/类时,我们希望将该类转发到共享父SDKCacheClassLoader。然后,下次我们使用URLClassLoader加载另一个jar文件(将SDKCacheClassLoader设置为共享父类加载器)时,父级应该已经从上次执行中找到并加载了该类,并且不需要扫描新的jar文件再次使用SDK类。

任何人对如何实现这一目标有任何想法?

另外,为了清楚起见,我不需要共享实例化对象,只需要简单的类定义,因为我知道JVM认为由2个不同类加载器加载的相同类是完全独立的类。

0 个答案:

没有答案