Performance 大型portlet war占用内存导致性能问题?

Performance 大型portlet war占用内存导致性能问题?,performance,memory,tomcat,portlet,Performance,Memory,Tomcat,Portlet,我听过一些人说,部署包含大量大型JAR的portlet war文件(或者任何war)可能会导致性能问题,因为所有这些JAR都会加载到内存中。如果您有几场战争,所有这些战争都包括大量的大型jar文件,那么您的系统将陷入困境 我正试图弄明白为什么这是真的,但我还没有找到任何可以解释这一点的方法。也许我在寻找错误的术语,这就是为什么我找不到太多信息的原因。有人能解释一下当一个portlet被实例化时到底发生了什么,以及这些jar是否真的开始占用内存吗 简短的回答是:是的,部署包含大量JAR的war文件

我听过一些人说,部署包含大量大型JAR的portlet war文件(或者任何war)可能会导致性能问题,因为所有这些JAR都会加载到内存中。如果您有几场战争,所有这些战争都包括大量的大型jar文件,那么您的系统将陷入困境


我正试图弄明白为什么这是真的,但我还没有找到任何可以解释这一点的方法。也许我在寻找错误的术语,这就是为什么我找不到太多信息的原因。有人能解释一下当一个portlet被实例化时到底发生了什么,以及这些jar是否真的开始占用内存吗

简短的回答是:是的,部署包含大量JAR的war文件“可能”导致性能问题。war是否包含portlet或标准web应用程序并不重要。 但在我看来,你不应该过早地担心这个问题,因为这个问题有简单的解决办法

当portlet或任何webApp加载到服务器时,它会将主jar的类加载到web服务器堆(分配给Java进程的内存)的“永久生成”区域。此区域存储执行的代码。当这些类使用来自其他JAR的代码时,它们的代码也会加载到此区域。 如果此区域已填充,您将获得OutOfMemoryError异常

您的问题的解决方案很简单:

  • 为内存分配更多内存(JVM的参数-Xmx)

  • 如果有多个.war文件中包含相同的jar文件,请从war文件中删除这些jar,并将它们放在Web服务器的所有公共库所在的目录中。此目录的位置取决于您正在使用的Web App服务器

  • 所以,你不应该担心这个问题,因为它有一个解决方案

    本PDF解释了内存管理在Java中的工作原理。它适用于常规Java应用程序和Web应用程序