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"
设置虚拟机参数
@Test public void test01() throws IOException { //调用该方法即可获取到changlu键对应的值666 String str = System.getProperty("changlu"); System.out.println(str); }
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> 覆盖引导类文件的位置
实例:
javap -c class文件名:代码进行反编译
javap -v class文件名:输出附加信息(包括行号、本地变量表,反汇编等详细信息)
2、jps(虚拟机进程监视器)
jps(Java Virtual Machine Process Status Tool):显示当前系统的java进程情况及进程id,主要在linux/unix平台上查看当前进程运行的相关信息,包含进程号。
实际案例:
1、jps:进程号+类名
2、jps -l:进程号+全限定类名(推荐使用)
3、jps -q:进程号
3、jstack(jvm堆栈跟踪工具)
jstack:java虚拟机自带的一种堆栈跟踪工具,可追踪指定的pid进程打印其中的堆栈信息。
实际案例:
1、jstack pid 进程号:查看指定进程号的堆栈信息,常用于排查死锁问题,配合jps获取到进程号。
4、jconsole(可视化管理工具)
Jconsole (Java Monitoring and Management Console):一种基于JMX的可视化监视、管理工具。能够进行线程监控、内存监控。
执行bin目录下的jconsole工具即可:jconsole
使用流程
选择指定的进程进行连接(该进程需要启动):
即可排查正在运行中的项目出现的死锁情况:
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 命令说明
windows平台:下载完之后直接解压即可。
Linux平台:解压之后,通过使用命令
如何使用?
将jad工具放置到需要反编译的目录下,执行命令jad -sjava Class文件名(反编译成java文件到当前目录)