Java bin 目录下的小工具使用与学习

Java bin 目录下的小工具使用与学习,第1张

Java bin 目录下的小工具使用与学习

结合周志明著的《深入理解Java虚拟机第三版》
JAVA与C++之间有一堵由内存动态分配和垃圾收集技术围成的高墙,墙外面的人想出去,墙里面的人却想出来。

首先需要注意的是:jdk安装好了之后,不是通过双击bin目录下的应用程序来使用的,是设置环境变量
JAVA_HOME=“jdk目录”,再在path环境变量后面追加%JAVA_HOME%bin; 然后再直接在cmd里面使用相关命令,否则直接使用的的话会发生闪退的情况。
我使用的是JDK 15 采用的垃圾回收器是ZGC

jps:虚拟机进程状况工具

JVM Process Status Tool

选项作用-q只输出LVMID,省略主类名称-m输出虚拟机进程启动时传递给主类main()函数的参数-v输出虚拟机进程启动时的JVM参数-l输出主类的全名,如果进程执行的是jar包,输出jar包的路径

功能虽然比较单一,但是使用的频率是很高的,因为需要根据此来获取LVMID以供其他的工具使用.
使用的格式:在cmd中 jps [optins] [hostid]
实例分析与使用:
我打开了一个java程序,程序处于运行状态:

然后打开任务管理器:

可以看到在我的任务管理器中,有两个java程序在运行?分别有自己的PID。接下来我使用jps:

9384是jar包在执行,8284是我开启的程序。

jstat:虚拟机统计信息监视工具

介绍:jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据,在没有GUI的图形界面,只提供纯文本控制台环境的服务器上,它将是运行期定位虚拟机问题所在的常用工具。
命令格式:jstat [option vmid [interval[s|ms] [count] ] ]
对于本地的虚拟机进程,VMID与LVMID是一致的;如果是远程虚拟机进程,那么,LVMID的格式如下:
[protocol:][//]lvmid[@hostname[:port]/servername]
参数interval和count代表查询间隔和次数,如果省略这两个参数,代表只查询一次。
eg:jstat -gc 2764 250 20
代表没250毫秒查询一次进程2764的垃圾收集状况,一共查询20次。
jstat主要针对检测:垃圾回收 类加载 运行期编译。
jstat工具主要选项:

选项作用-class监视类加载、类卸载、总空间以及类装载所耗费的时间-gc监视java堆的情况,包括Eden区,两个Survivor、老年代、永久代等的容量,已用空间、垃圾收集时间合计-gcutil与gc内容基本相同,单输出主要关注于已经使用的空间占总空间的百分比-gacapacity与-gc内容基本相同,但是主要关注Java堆各个区域使用到的最大最小空间-gccause与-gcutil功能一样,但是会输出导致上一次垃圾收集产生的原因–gcnew监视新生代垃圾收集情况-gcnewcapacity监视内容与-gcnew相同,主要关注使用到的最大最小空间–gcold监视新生代垃圾收集情况-gcoldcapacity监视内容与-gcnew相同,主要关注使用到的最大最小空间-complier输出即时编译器编译过的方法、耗时等信息-printcompilation输出已经被编译的方法

随便写创建一个创建对象的程序如下:

package JVM学习样例;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main2 {
    static class TestClass{
    private byte[] bytes=new byte[64*1024];
}
    public static void main(String[] args) throws InterruptedException {
        while (true){
            new Main.TestClass();
        }
    }
}

开始执行程序 并且使用jstat检测堆的情况:

S0 S1分别代表survivor0 1 E带表Eden空间占用百分比 O代表老年代空间占用百分比 M YGC代表垃圾回收次数 TGCT表示新生代垃圾回收使用时间 FGC表示发生Full GC的次数 FGCT 代表FGC垃圾回收占用的时间 GCT表示垃圾回收一共耗时。对于O M CGC CGCT目前先不做研究。
由于我的代码没有加sleep停顿,因此产生的速度过快,在我使用jstat的时候 可以看到新生代的垃圾回收次数因为程序产生数据过多,发生了很多次了已经,Eden会接近饱和状态,在垃圾回收的功能下,一直释放空间,随着程序的运行,一直被填充,然后回收。
总结:虽然使用jstat不如可视化工具表现得那样直观,但是在实际的生产环境中可能不一定能够使用图像界面,服务器大多数管理员习惯了在文本控制台工作,直接使用jstat仍然是常用的监控方式。

jinfo:Java配置信息工具

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4664534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存