[英]JVM code cache exceeds ReservedCodeCacheSize
我有一个 java 应用程序在 docker 中运行,OpenJDK8 上有标志:
-XX:+UseContainerSupport -XX:MaxRAMPercentage=80.0 -XX:NativeMemoryTracking=summary
我注意到本机 Memory 跟踪工具报告的代码缓存 memory 分配超过240MB
(默认ReservedCodeCacheSize
值):
jcmd 1 VM.native_memory summary | grep -i code
- Code (reserved=260013KB, committed=60465KB)
这是~ 254MB
保留memory。 这是打印的标志和 java 版本:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version | grep -i reserved
uintx ReservedCodeCacheSize = 251658240 {pd product}
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
我的问题是这是否是预期的行为? 如果是,那么是否可以计算最大代码缓存大小的实际限制?
谢谢!
本机 Memory 跟踪报告中的Code
不仅包含代码缓存,还包含其他一些内容。 该报告包括:
mmap
保留的固定大小空间:
malloc
'ed 在本机堆中:
代码字符串、 OopMaps 、异常处理程序缓存、适配器处理程序表和其他用于维护生成代码的结构。
这些结构是动态分配的; 它们没有专门的限制,但通常它们只占总生成代码的一小部分(参见 NMT 报告Code
部分中的malloc=
行)。
请注意, reserved
的 memory 实际上并不消耗地址空间以外的资源。 对于分析真正的 memory 使用情况, committed
更为相关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.