JDK工具包使用

举报
长路 发表于 2022/11/27 22:52:39 2022/11/27
【摘要】 文章目录前言java程序启动参数-DJDK自带工具包1、javap(反汇编器)2、jps(虚拟机进程监视器)3、jstack(jvm堆栈跟踪工具)4、jconsole(可视化管理工具)5、java6、jar其他工具jad(更强大的反汇编工具)参考文章 前言 本篇博客是只要是对JDK工具使用的笔记,若文章中出现相关问题,请指出! 所有博客文件目录索引:博客目录索引(持续更新) java程序启动参数-

@[toc]

前言

本篇博客是只要是对JDK工具使用的笔记,若文章中出现相关问题,请指出!

所有博客文件目录索引:博客目录索引(持续更新)

java程序启动参数-D

用于设置系统属性值。相当于添加到System类中的props

public final class System {
    
    private static Properties props;
    
    //根据key来获取对应的系统属性
    public static String getProperty(String key) {
        checkKey(key);
        SecurityManager sm = getSecurityManager();
        if (sm != null) {
            sm.checkPropertyAccess(key);
        }

        return props.getProperty(key);
    }
    
    //可设置对应的键值对
    public static String setProperty(String key, String value) {
        checkKey(key);
        SecurityManager sm = getSecurityManager();
        if (sm != null) {
            sm.checkPermission(new PropertyPermission(key,
                SecurityConstants.PROPERTY_WRITE_ACTION));
        }

        return (String) props.setProperty(key, value);
    }
}

实例演示

在执行字节码文件时,给命令后添加参数如:java -DChanglu=666"

image-20210301191604848

  • 设置虚拟机参数
@Test
public void test01() throws IOException {
    //调用该方法即可获取到changlu键对应的值666
    String str = System.getProperty("changlu");
    System.out.println(str);
}

image-20210301191531943


JDK自带工具包

1、javap(反汇编器)

在jdk的bin目录下的一个反汇编器,可以查看编译器为我们生成的字节码。从而了解编译器在执行字节码的很多内部工作。

简单编译字节码文件

首先使用javac 类名.java将源代码转为字节码文件(.class后缀)。

反编译命令javap 指定类.class进行反编译。

各种参数

 -help  --help  -?        输出此用法消息
 -version                 版本信息,其实是当前javap所在jdk的版本信息,不是class在哪个jdk下生成的。
 -v  -verbose             输出附加信息(包括行号、本地变量表,反汇编等详细信息)
 -l                         输出行号和本地变量表
 -public                    仅显示公共类和成员
 -protected               显示受保护的/公共类和成员
 -package                 显示程序包/受保护的/公共类 和成员 (默认)
 -p  -private             显示所有类和成员
 -c                       对代码进行反汇编
 -s                       输出内部类型签名
 -sysinfo                 显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列)
 -constants               显示静态最终常量
 -classpath <path>        指定查找用户类文件的位置
 -bootclasspath <path>    覆盖引导类文件的位置

实例

  1. javap -c class文件名:代码进行反编译
  2. javap -v class文件名:输出附加信息(包括行号、本地变量表,反汇编等详细信息)


2、jps(虚拟机进程监视器)

jps(Java Virtual Machine Process Status Tool):显示当前系统的java进程情况及进程id,主要在linux/unix平台上查看当前进程运行的相关信息,包含进程号。

实际案例

1、jps:进程号+类名

image-20210406134729127

2、jps -l:进程号+全限定类名(推荐使用)

image-20210406134809943

3、jps -q:进程号

image-20210406134849674



3、jstack(jvm堆栈跟踪工具)

jstack:java虚拟机自带的一种堆栈跟踪工具,可追踪指定的pid进程打印其中的堆栈信息。

实际案例

1、jstack pid 进程号:查看指定进程号的堆栈信息,常用于排查死锁问题,配合jps获取到进程号。



4、jconsole(可视化管理工具)

Jconsole(Java Monitoring and Management Console):一种基于JMX的可视化监视、管理工具。能够进行线程监控、内存监控。

执行bin目录下的jconsole工具即可jconsole


使用流程

选择指定的进程进行连接(该进程需要启动):

image-20210407180409273

image-20210407180429182

image-20210407180442509

image-20210407180507846

即可排查正在运行中的项目出现的死锁情况:

image-20210407180535439



5、java

启动jar包

使用以下命令执行jar包时,会用到目录META-INF\MANIFEST.MF文件,在该文件中有一个Main-Class: xxx,说明是java -jar会执行的类

// 当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出
java -jar xxxxx.jar

//当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行
java -jar xxxxx.jar &

 //意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
nohup Java -jar xxxxxx.jar &


6、jar

jar -cvf my.jar com\changlu\JVM\C.class:打包指定路径下指定包名中的Class类到名为my.jar的jar包中。

  • com\changlu\JVM\C.class则是指代当前目录下对应文件的指定类。


其他工具

jad(更强大的反汇编工具)

官网:https://varaneckas.com/jad/

相关命令文章:反编译工具jad 命令说明

image-20210315153021961

windows平台:下载完之后直接解压即可。

Linux平台:解压之后,通过使用命令

如何使用

  • 将jad工具放置到需要反编译的目录下,执行命令jad -sjava Class文件名(反编译成java文件到当前目录)。


参考文章

[1]. javap的基本用法

[2]. java程序启动参数-D详解

[3]. 反编译工具jad 命令说明

[4]. java命令–jstack 工具

[5]. jps命令的使用方法

ps://blog.csdn.net/elf8848/article/details/39926475)

[4]. java命令–jstack 工具

[5]. jps命令的使用方法

[6]. JConsole可视化工具介绍

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。