首页 > 系统相关 >Java内存分析相关工具

Java内存分析相关工具

时间:2022-08-18 21:47:09浏览次数:160  
标签:Java 虚拟机 System 内存 工具 jmap jps

1、jps 工具

jps(Java Virtual Machine Process Status Tool)是JDK提供的一个可以列出正在运行的Java虚拟机的进程信息的命令行工具,它可以显示 Java 虚拟机进程的执行主类(Main Class,main()函数所在的类)名称、本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)等信息。另外,jps命令只能显示它有访问权限的Java进程的信息。

通过 jps 命令可以查看当前系统中有哪些 java 进程。

 

命令语法:

jps [-q] [-mlvV] [hostid]

jps [-help]

命令参数说明:

  • -q:不显示主类名称、JAR文件名和传递给主方法的参数,只显示本地虚拟机唯一ID。
  • -mlvV:我们可以指定这些参数的任意组合。
  • -m:显示Java虚拟机启动时传递给main()方法的参数。
  • -l:显示主类的完整包名,如果进程执行的是JAR文件,也会显示JAR文件的完整路径。
  • -v:显示Java虚拟机启动时传递的JVM参数。
  • -V:不显示主类名称、JAR文件名和传递给主方法的参数,只显示本地虚拟机唯一ID。
  • hostid:指定的远程主机,可以是ip地址和域名, 也可以指定具体协议,端口。如果不指定,则显示本机的Java虚拟机的进程信息。
  • -help:显示jps命令的帮助信息。

 

2、jmap 工具

jmap(Java Virtual Machine Memory Map)是 JDK 提供的一个可以生成 Java 虚拟机的堆转储快照 dump 文件的命令行工具。

通过命令: jmap - heap 进程id 可以查看堆内存占用情况。

命令语法:

jmap [options] pid
  • pid:要打印配置信息的Java虚拟机的进程ID。
  • option:jmap命令的可选参数。如果没有指定这个参数,jinfo命令会显示Java虚拟机进程的内存映像信息,如下图:

 

2.1、常见参数

2.1.1、jmap -heap pid

显示Java堆的如下信息:

  • 被指定的垃圾回收算法的信息,包括垃圾回收算法的名称和垃圾回收算法的详细信息。
  • 堆的配置信息,可能是由命令行选项指定,或者由Java虚拟机根据服务器配置选择的。
  • 堆的内存空间使用信息,包括分代情况,每个代的总容量、已使用内存、可使用内存。如果某一代被继续细分(例如,年轻代),则包含细分的空间的内存使用信息。

代码演示,通过以下步骤演示使用 jmap 分析代码执行过程中的堆内存。

package cn.itcast.jvm.t1.heap;

/**
 * 演示堆内存
 */
public class Demo1_4 {

    public static void main(String[] args) throws InterruptedException {
        System.out.println("1...");
        Thread.sleep(30000);
        byte[] array = new byte[1024 * 1024 * 10]; // 10 Mb
        System.out.println("2...");
        Thread.sleep(20000);
        array = null;
        System.gc();
        System.out.println("3...");
        Thread.sleep(1000000L);
    }
}

以上代码将依次输出1、2、3,如下:

我们将依次在程序输出1、2、3时打印出此时的堆内存。 

如下,在输出 1 时打印的堆内存,可以看到此时程序刚开始启动,堆内存占用并不大。

 

在输出 2 时打印堆内存如下,因为此时已经创建了一个 10m 大小的字节数组对象,所以可以看到堆内存增加了差不多 10m 的大小。

 

在输出 3 时打印堆内存如下,因为此时我们没有代码指向那个字节数组对象,并且主动调用了垃圾回收,所以可以看到堆内存减少了差不多 10m 的大小,这是因为那个字节数组对象被垃圾回收掉了。

 

3、jconsole

Jconsole 是 jdk 自带的一套java虚拟机执行状况监视器,它能够用来监控虚拟机的内存,线程,cpu使用情况以及相关的java进程相关的MBean,主界面例如以下:

 

 

演示,假如我们执行以下代码:

package cn.itcast.jvm.t1.heap;

/**
 * 演示堆内存
 */
public class Demo1_4 {

    public static void main(String[] args) throws InterruptedException {
        System.out.println("1...");
        Thread.sleep(30000);
        byte[] array = new byte[1024 * 1024 * 10]; // 10 Mb
        System.out.println("2...");
        Thread.sleep(20000);
        array = null;
        System.gc();
        System.out.println("3...");
        Thread.sleep(1000000L);
    }
}

在启动 main 方法后,在命令行中直接输入 jconsole,可以看到堆内存的趋势,如下:

可以看到,堆内存在一个时间点急剧上升,这是因为我们创建了一个接近 10m 的字节数组对象,然后又在一个时间点急剧下降,这是因为此时那个字节数组对象已经没有引用,并且我们主动调用了垃圾回收,所以可以看到堆内存减少了差不多 10m 的大小,。

 

标签:Java,虚拟机,System,内存,工具,jmap,jps
From: https://www.cnblogs.com/wenxuehai/p/16600216.html

相关文章

  • JAVA实现邮件发送
    JAVA实现邮件发送一、邮件服务器与传输协议要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件......
  • JavaSE:第十七章:编程测试题
    练习:求1+2!+3!+…+20!的和longsum=0;for(inti=1;i<=20;i++){longtemp=1;for(intj=1;j<=i;j++){temp*=j;}sum+=......
  • 【Azure Redis 缓存】Redisson 连接 Azure Redis出现间歇性 java.net.UnknownHostExce
    问题描述在Java项目中,使用Redisson作为连接Redis的客户端,间歇性的出现了DNSMonitorthrowable错误。DNSMonitorthrowable="java.net.UnknownHostException:failedto......
  • 初识JAVA
    初识JAVA Java诞生C语言1972年指针,内存管理C++1982年兼容C语言java1995年语法像,无指针内存管理,可移植,高性能版本包含SE标准版(桌面,控制台) 基础ME嵌......
  • JavaSE:第二章:变量与运算符
    史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。变量与运算符:包含关键字,保留字,标识符,变量,运算符。更多内容请见原文,原文转载自:https://blog.csdn.net/weixin_44......
  • 计算机内存容量单位
    计算机内存容量单位1、什么是计算机的内存容量单位:计算机的内存容量通常是指随机存储器(RAM)的容量,是内存条的关键性参数。内存容量以MB作为单内容存量位,可以......
  • 10.java NIO核心2:通道(Channel)
    publicinterfaceChannelextendClonseable{}. 写案例:@Testpublicvoidwrite(){try{//1.字节输出流到目标文件......
  • 解决Java前后端跨域问题
    在后端解决在springboot项目的包目录下创建一个config包在包里新建一个CorsConfig类:packagecom.liu.springboot.config;importorg.springframework.context.annotat......
  • java使用秘钥加密密码
    对称加密什么是对称加密对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(miyao)一起经过特殊加密算法处理后,使其变成复......
  • JavaSE:第三章:程序流程控制
    史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。流程控制:包含顺序结构,分支结构,循环结构,break,continue,return,部分代码了解。更多内容请见原文,原文转载自:https://......