许多java.util.zip.ZipFile$ZipFileInputStream对象/多次加载的相同JAR

许多java.util.zip.ZipFile$ZipFileInputStream对象/多次加载的相同JAR,java,memory,jar,garbage-collection,Java,Memory,Jar,Garbage Collection,我正在检查Tomcat应用程序的堆转储,当它在启动后立即增加负载时,该应用程序往往会崩溃。在崩溃期间,我观察到执行完整GC(最大6GB堆大小,使用CMS)和线程计数增加(范围从600到2000)的失败尝试越来越多。MAT报告: One instance of "java.lang.ref.Finalizer" loaded by "<system class loader>" occupies 5 291 528 160 (94,59%) bytes. The instance i

我正在检查Tomcat应用程序的堆转储,当它在启动后立即增加负载时,该应用程序往往会崩溃。在崩溃期间,我观察到执行
完整GC
(最大6GB堆大小,使用
CMS
)和
线程计数增加(范围从600到2000)的失败尝试越来越多。MAT报告:

One instance of "java.lang.ref.Finalizer" loaded by "<system class loader>" occupies 
5 291 528 160 (94,59%) bytes. The instance is referenced
by org.python.core.ThreadState @ 0x679fba460 , loaded
by "org.apache.catalina.loader.ParallelWebappClassLoader @ 0x674d08e88".
The memory is accumulated in one instance of "java.lang.ref.Finalizer" loaded
by "<system class loader>".

Keywords
java.lang.ref.Finalizer
org.apache.catalina.loader.ParallelWebappClassLoader @ 0x674d08e88
java.util.zip.ZipFile$ZipFileInputStream引用的文件

  ...
  339 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-metadata-9.4.jar
  345 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/hsqldb-1.8.0.10.jar
  388 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/javassist.jar
  396 /usr/local/tomcat8/lib/orai18n-servlet.jar
  427 /usr/lib/jvm/jdk1.8.0_112/jre/lib/ext/sunjce_provider.jar
  448 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/xstream-1.4.2.jar
  449 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jersey-core-1.17.jar
  474 /usr/local/tomcat8/lib/orai18n.jar
  538 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jersey-server-1.17.jar
  553 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-referencing-9.4.jar
  591 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jts-1.13.jar
  614 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jackson-databind-2.1.4.jar
  679 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-opengis-9.4.jar
  688 /usr/local/tomcat8/webapps/geoserver/WEB-INF/lib/gt-xsd-gml3-15.2.jar
  908 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jai-core-1.1.3.jar
 1023 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-main-9.4.jar
 1161 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/ojdbc6.jar
 1194 /usr/local/tomcat8/lib/orai18n-translation.jar
 1688 /usr/lib/jvm/jdk1.8.0_112/jre/lib/rt.jar
 6631 /usr/local/tomcat8/lib/ojdbc6.jar
我觉得奇怪的是,
jar
文件被多次加载。我会怀疑内存泄漏,但因为即使
jdk1.8.0112/jre/lib/rt.jar
被加载了1000多次,我也不知道该怎么想所以我想解释一下为什么Java多次加载相同的jar文件。也许有一个标志来控制这个过程,这样我可以提高Tomcat的性能

  ...
  339 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-metadata-9.4.jar
  345 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/hsqldb-1.8.0.10.jar
  388 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/javassist.jar
  396 /usr/local/tomcat8/lib/orai18n-servlet.jar
  427 /usr/lib/jvm/jdk1.8.0_112/jre/lib/ext/sunjce_provider.jar
  448 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/xstream-1.4.2.jar
  449 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jersey-core-1.17.jar
  474 /usr/local/tomcat8/lib/orai18n.jar
  538 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jersey-server-1.17.jar
  553 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-referencing-9.4.jar
  591 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jts-1.13.jar
  614 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jackson-databind-2.1.4.jar
  679 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-opengis-9.4.jar
  688 /usr/local/tomcat8/webapps/geoserver/WEB-INF/lib/gt-xsd-gml3-15.2.jar
  908 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jai-core-1.1.3.jar
 1023 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-main-9.4.jar
 1161 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/ojdbc6.jar
 1194 /usr/local/tomcat8/lib/orai18n-translation.jar
 1688 /usr/lib/jvm/jdk1.8.0_112/jre/lib/rt.jar
 6631 /usr/local/tomcat8/lib/ojdbc6.jar