Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使tomcat从元空间卸载编译的JSP文件_Java_Jsp_Tomcat_Memory_Memory Leaks - Fatal编程技术网

Java 使tomcat从元空间卸载编译的JSP文件

Java 使tomcat从元空间卸载编译的JSP文件,java,jsp,tomcat,memory,memory-leaks,Java,Jsp,Tomcat,Memory,Memory Leaks,类似于,但有一些更现代的问题 我有一个遗留应用程序,它有很多JSP。他们中的一些人使用…来创建空格(因为页面上的CSS清理还没有完成) 最近,在系统运行了一段时间后,出现了内存不足错误。我正在评估堆空间,它似乎在控制之下,强制周期性的GCs显示堆空间小于100MBs,但非堆大小正在增加。我已经将大小限制为300MB,这似乎已经很多了,因为Docker中的系统通常运行在512MB 无论如何,我使用JSPC,当我合计所有生成的类文件占用的字节数时,我得到21981012字节。根据我所看到的其他答案,

类似于,但有一些更现代的问题

我有一个遗留应用程序,它有很多JSP。他们中的一些人使用
来创建空格(因为页面上的CSS清理还没有完成)

最近,在系统运行了一段时间后,出现了内存不足错误。我正在评估堆空间,它似乎在控制之下,强制周期性的GCs显示堆空间小于100MBs,但非堆大小正在增加。我已经将大小限制为300MB,这似乎已经很多了,因为Docker中的系统通常运行在512MB

无论如何,我使用JSPC,当我合计所有生成的类文件占用的字节数时,我得到21981012字节。根据我所看到的其他答案,我认为它进入了元空间。当然,当它被解压到内存中时,这个数字可能会增加很大一部分

所以我的问题是,有没有一种方法可以配置Java或Tomcat在metaspace不使用时从metaspace释放类数据,并在需要时重新加载

更新:我在我的
CATALINA_OPTS
中明确限制了元空间大小,以便它更快地失败-XX:MaxMetaspaceSize=200m-XX:CompressedClassSpaceSize=100m

这是VisualVM。类似乎没有被卸载,元空间也没有下降。

这是元空间。
默认情况下,JVM处理类的加载和卸载。您的应用程序命令行是什么?您看到的是OOM:Metaspace还是JavaHeap