我正在运行Tomcat应用程序(由Hibernate + EhCache组成)。典型的ORM webapp不应该创建很多类。但是,Native Memory Tracking说" Nay"。
在过去24小时内,我的网络平台在Metaspace平均每小时创建约1个新课程,每小时最多11个课程,4个小时没有创建课程。
所以,我从7449课开始,24小时后我有7481课。 在引入完整的GC之后,类的数量可以减少0-2,但总体上保持不变。
所以
如果懒惰地加载类,我如何估计在本机内存中创建的类的总数?
如何记录哪些新类加载到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
答案 0 :(得分:2)
有没有办法预测这些代理类计数
一般来说,没有。理论上的应用程序可以随时发出类文件字节码。
如何强制JVM急切加载所有类?
你做不到。延迟类加载是Java功能之一。好吧,您可以扫描类路径并加载所有JAR中的所有类,但这不是您想要做的,因为它最终会有数千个从未使用过的类。
如何记录哪些新类加载到Metaspace?
使用-XX:+TraceClassLoading