JVM参数NativeMemoryTracking的使用

 更新时间:2025年01月23日 11:35:49   作者:WannaRunning  
本文主要介绍了JVM参数NativeMemoryTracking的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

实际开发场景中应该有发现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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Java抽象类的概念讲解

    Java抽象类的概念讲解

    今天小编就为大家分享一篇关于Java抽象类的概念讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • java中int初始化可以为0,但不能为NULL问题

    java中int初始化可以为0,但不能为NULL问题

    这篇文章主要介绍了java中int初始化可以为0,但不能为NULL问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Springboot中如何自动转JSON输出

    Springboot中如何自动转JSON输出

    这篇文章主要介绍了Springboot中如何自动转JSON输出,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • MybatisPlus3.5.5与pagehelper starter2.1.0冲突的问题解决

    MybatisPlus3.5.5与pagehelper starter2.1.0冲突的问题解决

    在使用MybatisPlus 3.5.5与PageHelper Starter 2.1.0时,由于引用了不同版本的jsqlparser库(4.6与4.7),会导致运行时错误,解决方案涉及确认依赖版本,本文就来介绍一下,感兴趣的同学可以下载学习
    2024-10-10
  • maven利用tomcat插件部署远程Linux服务器的步骤详解

    maven利用tomcat插件部署远程Linux服务器的步骤详解

    Maven已经是Java的项目管理常用方式,下面这篇文章主要给大家介绍了关于maven利用tomcat插件部署远程Linux服务器的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • Mybatis Log Plugin的使用方式

    Mybatis Log Plugin的使用方式

    这篇文章主要介绍了Mybatis Log Plugin的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 微信小程序微信登录的实现方法详解(JAVA后台)

    微信小程序微信登录的实现方法详解(JAVA后台)

    通常我们在登录微信小程序的时候都是通过授权登录,下面这篇文章主要给大家介绍了关于微信小程序微信登录的实现方法,文中通过实例代码介绍的介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 使用SpringMVC接收文件流上传和表单参数

    使用SpringMVC接收文件流上传和表单参数

    这篇文章主要介绍了使用SpringMVC接收文件流上传和表单参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot中的拦截器使用详解

    SpringBoot中的拦截器使用详解

    本文详细解析了Spring框架中的拦截器机制,通过自定义拦截器实现登录校验,并介绍了拦截器的执行流程、路径配置及适配器模式的应用,感兴趣的朋友一起看看吧
    2026-05-05
  • JavaCV 图像边缘检测之Canny 算法详解

    JavaCV 图像边缘检测之Canny 算法详解

    在图像处理中,边缘检测是基础且关键的一环,其中Canny边缘检测算法以其高精度和可靠性著称,本文详细介绍了使用JavaCV库实现Canny算法的原理和步骤,结合代码示例和案例分析,展示了Canny算法在Java环境下的实现过程和边缘检测效果
    2024-11-11

最新评论