原文英文,约900词,阅读约需3分钟。
📝
内容提要
本文介绍了使用JFR报告NMT数据的方法,包括直接字节缓冲区和Foreign Memory API分配堆外内存。还讨论了JFR中控制NMT的设置和在JDK Mission Control中查看NMT数据的方法。最后,介绍了使用JFR记录Resident Set Size(RSS)事件来跟踪内存消耗。
🎯
关键要点
-
本文介绍了通过JFR报告NMT数据的方法,包括直接字节缓冲区和Foreign Memory API的使用。
-
示例程序展示了如何分配堆外内存,并使用JFR记录NMT事件。
-
NMT事件默认每秒记录一次,程序运行时间足够长以确保不同的分配被记录。
-
NMT在JFR中通过gc设置控制,必须设置为'normal'、'detailed'、'high'或'all'以记录NMT数据。
-
使用-XX:NativeMemoryTracking JVM选项启用NMT。
-
在JDK Mission Control中查看NMT数据时,NMT事件显示在通用事件浏览器视图中。
-
新Foreign Memory API的优势在于内存可以在Arena对象关闭时立即释放。
-
NMT会导致5%-10%的性能开销,不适合在生产环境中长期使用。
-
Java 21引入了'Resident Set Size' (RSS)事件,可以持续跟踪应用程序的内存消耗。
-
通过JFR事件流,可以将RSS值实时传输给远程监控客户端,便于可视化监控。
🏷️