栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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配置信息工具
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/336846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号