我正在运行Tomcat应用程序(由Hibernate + EhCache组成)。这是典型的ORM Web应用程序,不应创建很多类。但是,本机内存跟踪显示为“否”。
在过去的24小时内,我的Web应用程序平均每小时在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
有没有办法预测这些代理类的数量
一般来说,不可以。理论上,一个应用程序可以随时发出类文件字节码。
如何强制JVM紧急加载所有类?
你不能 延迟类加载是Java的功能之一。好吧,您可以扫描类路径并从所有JAR加载所有类,但这不是您想要的,因为它最终会导致成千上万个未使用的类。
如何记录将哪些新类加载到Metaspace?
采用 -XX:+TraceClassLoading
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句