当前位置: 代码网 > it编程>编程语言>Java > JVM参数NativeMemoryTracking的使用

JVM参数NativeMemoryTracking的使用

2025年01月24日 Java 我要评论
实际开发场景中应该有发现java应用程序会消耗比设置-xms和-xmx更多的内存,究其原因其实是因为jvm中除了大家熟知的堆内存外,还有所谓的非堆内存(non-heap memory),详细来看,非堆

实际开发场景中应该有发现java应用程序会消耗比设置-xms和-xmx更多的内存,究其原因其实是因为jvm中除了大家熟知的堆内存外,还有所谓的非堆内存(non-heap memory),详细来看,非堆内存包括方法区和java虚拟机内部做处理或优化所需的内存。

从图上可以看到jvm内存部分,除了堆内存外还有方法区,包括线程栈,常量池,方法和构造函数代码等。方法区在逻辑上是堆的一部分,但在hotspot中是堆外存储的,不同虚拟机可能实现有所不同。

native memory tracking (nmt)

nmt,全称为native memory tracking,是java 8u40版本引入的一项功能,用于跟踪jvm本身在本地内存中的内存使用情况。我们可以使用 nmt 来追踪了解 jvm 的内存使用详情(即上图中的 jvm memory 部分),帮助我们排查内存增长与内存泄漏相关的问题。

native memory tracking 主要是用来通过在 jvm 向系统申请内存的时候进行埋点实现的。

native memory tracking 默认是不开启的,并且无法动态开启(因为这是埋点采集统计的,如果可以动态开启那么没开启的时候的内存分配没有记录无法知晓,所以无法动态开启),目前只能通过在启动 jvm 的时候通过启动参数开启。

nativememorytracking参数使用

回到本文要说的 nativememorytracking参数,这个参数用于开启和配置nmt的。要开启配置和在需要时进行查看,需要配合jcmd的命令来实现。

配置启动nmt参数

通过设置 jvm 启动参数来开启:-xx:nativememorytracking=[off | summary | detail]

关于参数选项的解释如下 

off不跟踪 jvm 本地内存使用情况。如果不指定 -xx:nativememorytracking 选项则默认为off。
summary仅跟踪 jvm 子系统(如:java heap、class、code、thread等)的内存使用情况。
detail除了通过 jvm 子系统跟踪内存使用情况外,还可以通过单独的 callsite、单独的虚拟内存区域及其提交区域来跟踪内存使用情况。

使用 jcmd <pid> vm.native_memory 查看

开启之后,我们可以通过 jcmd 命令去查看 native memory tracking 的信息,即

jcmd <pid> vm.native_memory

到此这篇关于jvm参数nativememorytracking的使用的文章就介绍到这了,更多相关jvm nativememorytracking内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com