【发布时间】:2014-08-11 22:56:24
【问题描述】:
我在 Tomcat server (v7) 上部署了两个应用程序,这两个应用程序都使用相同的共享库。我想减少这些应用程序在 JVM 上的 permgen 内存占用,因此我决定将公共共享库从单独的战争中取出,并将其放在 tomcat library folder 中。
但是这个实验适得其反,因为 ClassLoader 是每个应用程序上下文,即使我将库移动到 tomcat lib,共享库被加载到两个应用程序的上下文中,更糟糕的是它被加载到其他应用程序的上下文中不使用此共享库的应用。
有没有办法在 web 服务器的上下文中只加载一次库?
我了解线程安全的风险,这些风险在我的案例中得到了缓解。
【问题讨论】:
-
恐怕没有。对不起。
-
您的共享库是否太大以至于内存消耗成为问题?
-
@dimoniy 是的,大约 30 MB,我以 2 个应用为例,但我们正在成长,并且正在添加新应用并使用相同的共享库。
-
@Puru-- 也许你应该将你的库提取到 Web 服务中,然后在本地部署和使用它。呼叫和开发成本将产生开销。另一种选择是 RCP。
标签: java tomcat web-applications classloader