Spring 我应该如何在同一个tomcat上部署多个WebApp(使用相同的第三方JAR)以使用最少的RAM

Spring 我应该如何在同一个tomcat上部署多个WebApp(使用相同的第三方JAR)以使用最少的RAM,spring,hibernate,tomcat,web-applications,classloader,Spring,Hibernate,Tomcat,Web Applications,Classloader,我将有多个网络应用程序。如果我将所有第三方JAR放在每个war文件中(对应于每个webapp),则所有webapp都是基于java并使用Spring/hibernate等的;将会有巨大的内存占用空间 当第三方JAR(如spring/hibernate)在所有Web应用程序中都很常见时;什么是使内存使用最少的最佳方法?我可以想到的一个选择是将这些第三方JAR放在Tomcat/lib中,这样它们就可以在多个Web应用程序之间共享 还有其他更好的办法吗 我觉得你把内存(RAM)和磁盘存储搞混了 如果您

我将有多个网络应用程序。如果我将所有第三方JAR放在每个war文件中(对应于每个webapp),则所有webapp都是基于java并使用Spring/hibernate等的;将会有巨大的内存占用空间

当第三方JAR(如spring/hibernate)在所有Web应用程序中都很常见时;什么是使内存使用最少的最佳方法?我可以想到的一个选择是将这些第三方JAR放在Tomcat/lib中,这样它们就可以在多个Web应用程序之间共享


还有其他更好的办法吗

我觉得你把内存(RAM)和磁盘存储搞混了

如果您希望尽量减少磁盘空间的使用,那么是的,您可以将jar文件放在一个共享位置-请参阅


这对内存使用没有任何影响-每个应用程序都将在其自己的类加载器下加载所需的类。

是的,Tomcat的公共类加载器将只在Tomcat的公共库中加载这些JAR一次,因为所有Web应用程序共享同一个公共类加载器。但由于各种问题,一些罐子无法工作。所以你必须试一试。

重复的?解决方案和优缺点已经在这里讨论过了。我当然不会混淆磁盘存储和ram存储。我关心的是RAM存储。即使在AWS micro instance上,磁盘存储也是10GB的,而且非常便宜。正如我所说,共享磁盘上的JAR不会节省任何内存使用-每个应用程序都将加载自己的JAR副本;看起来,如果我们把这些罐子放在CATALINA_HOME/lib;它们不会被多次加载,并且会像“共享库文件”一样运行。。不是吗?事实上,从官方文件上我还不清楚。有一个“公共”类加载器,但没有明确说明共享jar文件是否只加载一次。我想你得试试看,我同意;从官方文件来看,这并不十分明显。