我正在运行Tomcat应用程序(它由Hibernate + EhCache组成)。这是典型的ORM webapp,不应该创建大量的类。但是,Native Memory Tracking说“不”。为什么class 8 metaspace在Java 8中随时间增加?
在过去24小时内,我的webapp平均每小时在Metaspace创建约1个新课程,每小时创建11个课时,并且高峰4个小时,而不创建课程。
所以,我开始了7449课,24小时后我有7481课。 诱导完全GC后,类数可以减少0-2,但总体保持不变。
所以
如果类被延迟加载的,我怎么能估计的类的总数在本机内存中创建?
- 我知道Hibernate创建代理类。有没有办法预测这些代理类的数量?
- 如何强制JVM急切地加载所有类?
我该如何记录哪些新类加载到Metaspace?
我的配置:
Server version: Apache Tomcat/8.0.28
OS Name: Linux
OS Version: 3.14.34-27.48.amzn1.x86_64
Architecture: amd64
JVM Version: 1.8.0_71-b15
JVM Vendor: Oracle Corporation
JVM flags: -Xms512m -Xmx2G -XX:+UseG1GC -XX:NativeMemoryTracking=summary -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
Hibernate 4.3.1