详解JVM中的本机内存跟踪

yizhihongxing

详解JVM中的本机内存跟踪

JVM内存管理机制中,本机内存是一个重要的概念。本机内存主要指的是JVM所管理的非Java堆内存。在本机内存中,主要包括了本地程序库、直接内存以及堆外内存。

在进行JVM内存跟踪和性能调优时,本机内存也是一个需要我们关注的维度。下文将详细讲解如何进行JVM中的本机内存跟踪。

本机内存的组成部分

JVM中的本机内存主要由以下几部分组成:

1. 本地程序库

本地程序库就是指使用本机语言(如C和C++)编写的动态链接库和静态链接库。对于Java程序而言,本地程序库通常用于提高性能或利用操作系统提供的接口。

如果在Java应用中使用了Java Native Interface(JNI),那么应用程序会与本地程序库进行交互。在JVM中,本地程序库被加载进特殊的本地内存区域中,被称为“native heap”。

2. 直接内存

直接内存是一种可以在JVM中直接使用的内存,它不受Java堆内存大小的限制,且在某些情况下可以提供更高的性能。

直接内存是通过Java NIO包中ByteBuffer的allocateDirect方法实现的。在创建一个ByteBuffer时,可以选择将其分配到Java堆内存中(使用allocate方法),或是分配到本地内存中(使用allocateDirect方法)。

对于前者,JVM会将分配到的堆内存缓存区转换成直接内存缓存区,并且JVM会在针对JVM堆内存进行垃圾回收的同时,也回收删除直接内存缓存区中的无用对象。

3. 堆外内存

堆外内存是指Java堆以外的内存空间,它也是直接内存的一种。与直接内存不同的是,堆外内存通常是在Java代码中通过Java NIO类库进行控制的。

与直接内存一样,堆外内存的申请和释放都不在JVM的控制范围之内,所以也不受JVM中内存管理机制所影响。此外,堆外内存的分配和回收速度相对较快,在大数据处理的场景下具有很好的应用前景。

本机内存跟踪工具

JVM中提供了jstat和jcmd两个命令可以用于监控本机内存使用状况。

1. jstat

jstat命令是JDK自带的一个命令,它可以帮助我们实现对JVM内存的实时监控。

使用jstat命令可以查看本机内存中Native Heap和Direct Memory的使用情况。

  • jstat -gccapacity :查看本机内存中Native Heap的使用情况,可以得出各代的容量、使用量、占比等信息。

  • jstat -gcutil :查看本机内存中各代的使用情况,可以得出各代的空间利用率、空间碎片率、对象分配数量等信息。

  • jstat -class :查看本机内存中的类加载信息,可以得出已加载的类数量、卸载的类数量等信息。

2. jcmd

jcmd命令是在JDK 1.7中引入的命令,它提供了一系列与JVM相关的操作,包括了显示GC概要、启动、停止、线程转储、堆转储、类直方图等。

使用jcmd命令可以查看本机内存中的直接内存使用情况。

  • jcmd VM.native_memory:查看本机内存中的直接内存使用情况,可以得出直接内存的大小、使用量、占比等信息。

示例1:jstat命令查看Native Heap使用情况

下面是一个使用jstat命令查看Native Heap使用情况的示例:

jstat -gccapacity <pid>

输出结果如下:

 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      S0     S1     YGC     YGCT    FGC    FGCT     GCT   
 165248.0 165248.0 165248.0  0.0 9688.0 129856.0   131072.0  524288.0   131072.0  131072.0  0.0 9688.0   2864   30.661   3     0.682   31.344

从结果中可以看到,本机内存中的Native Heap总容量为165248KB,Young区容量为 165248KB,Eden区容量为 129856KB,Survivor(S0/S1)区容量为 0KB/9688KB,Old区容量为 131072KB。

示例2:jcmd命令查看直接内存使用情况

下面是一个使用jcmd命令查看直接内存使用情况的示例:

jcmd <pid> VM.native_memory

输出结果如下:

Native Memory Tracking:

Total:                                56976720 KB

从结果中可以看到,本机内存中直接内存的大小为56976720KB,可以将其占比计算出。

结论

使用jstat和jcmd命令可以方便地查看JVM本机内存的使用情况,对性能调优非常有帮助。在真实的应用场景中可以根据实际情况使用相关命令。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JVM中的本机内存跟踪 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Hibernate5新特性介绍

    Hibernate5新特性介绍 Hibernate是一个广泛使用的ORM(对象关系映射)框架,致力于使得数据库的操作变得更为容易和快捷。而在Hibernate5中,新增了一些重要的特性,既改善了ORM的用法,又增强了其性能和扩展性。本篇文章将会介绍Hibernate5中的一些新特性,并带有相应的示例,以便让读者更好地理解和使用。 JPA2.1规范的实现 Hi…

    Java 2023年5月19日
    00
  • Spring Boot接口设计防篡改、防重放攻击详解

    Spring Boot接口设计防篡改、防重放攻击详解 什么是接口防篡改、防重放攻击? 在接口调用的过程中,通常会遇到安全问题,例如请求地址被篡改,或者请求数据被重放等风险。接口防篡改、防重放攻击就是通过一系列的措施,保证接口的安全性,确保接口只能被合法请求方所调用。 如何进行接口防篡改、防重放攻击? 使用HTTPS协议 首先,使用HTTPS协议可以有效的保障…

    Java 2023年5月19日
    00
  • Java 实战图书管理系统的实现流程

    Java 实战图书管理系统实现流程 本文将给出一个详细的Java 实战图书管理系统实现流程。我们将按照以下五步走进行: 1. 规划 首先我们需要规划我们的图书管理系统将包含哪些功能,这样我们才能更好的开始开发我们的应用程序。我们的规划包括以下几点: 实现基本的图书信息管理功能 包括添加、修改、删除、查询等功能 图书信息应该能方便地导出为Excel文件 实现图…

    Java 2023年5月24日
    00
  • Java+swing+Mysql实现商品销售管理系统

    让我来讲解“Java+swing+Mysql实现商品销售管理系统”的完整攻略。这个系统主要涉及到 Java 编程语言、swing GUI 工具包以及 Mysql 数据库的应用。下面是具体的步骤: 步骤一:环境搭建与项目创建 在搭建环境之前需要安装 Java JDK、Eclipse/IDEA 编辑器、Mysql 数据库工具等软件。具体过程可以参考网上教程进行安…

    Java 2023年5月19日
    00
  • 基于html5+java实现大文件上传实例代码

    让我详细为您介绍一下“基于html5+java实现大文件上传实例代码”的完整攻略和代码实现。 简介 为了解决传统文件上传方式在处理大文件上传时所面临的性能瓶颈和功能缺失,我们需要使用一些新的技术手段。html5提供了File API来处理客户端文件读取,而java的高性能能力则可以处理并发上传和分片上传等复杂操作,两者结合起来,就能够实现一套优秀的大文件上传…

    Java 2023年5月19日
    00
  • Java实现飞机航班管理系统的思路详解

    下面我将详细讲解如何实现Java实现飞机航班管理系统,包括以下几个方面的内容: 需求分析 数据库设计 后端开发 前端开发 需求分析 首先需要明确我们所实现的飞机航班管理系统的功能需求,包括但不限于: 管理员登录和退出 飞机航班信息的录入、查询、修改和删除 机场信息的录入、查询、修改和删除 用户的注册、登录和退出 订单的生成、查询、修改和删除 统计功能,如航班…

    Java 2023年5月19日
    00
  • 详解在Java的Struts2框架中配置Action的方法

    下面我将详细讲解在Java的Struts2框架中配置Action的方法。在Struts2框架中,可以通过配置struts.xml文件或注解的方式来配置Action。 1. 配置struts.xml文件 1.1 新建Action类 首先需要新建一个Action类,通常继承com.opensymphony.xwork2.ActionSupport类。例如: pu…

    Java 2023年5月20日
    00
  • SpringSecurity OAuth2单点登录和登出的实现

    一、前言 本文主要介绍如何使用Spring Security OAuth2实现单点登录和登出的功能,同时提供两个完整的示例,让读者更加容易的理解和实践。 二、单点登录和登出的实现 2.1 单点登录 在Spring Security OAuth2中实现单点登录的功能需要涉及到以下几个组件: OAuth2认证服务器:负责认证用户并颁发令牌 OAuth2客户端:使…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部