- (编译、执行、打 jar 包、生成 API、Java 调试器、Java 反汇编器)
1、编译 - javac
- Javac: Java 源程序编译器,将 Java 源代码转换成字节码。
- javac -cp ./libs/slf4j-api-1.7.25.jar;./libs/logback-core-1.2.3.jar;./libs/logback-classic-1.2.3.jar -d ./class-out -encoding utf8 ./src/com/zhangxy/.java ./src/com/zhangxy/bean/.java ./src/com/zhangxy/tool/*.java
- -d:指定存放生成的 class 文件路径
- -s:指定需要编译的 java 文件或所在路径
- -encoding:指定 java 文件使用的字符编码。一般都会指定 utf-8 编码,否则输出的中文是乱码。
- -cp:是 -classpath 的缩写。指定编译依赖的 class 文件所在的 classpath 路径、jar、zip。多个路径、jar、zip 使用分号(;)分隔。
2、执行 - java
- Java: Java 解释器,直接从字节码文件,又称为类文件.执行 Java 应用程序的字节代码。
- java** -cp ./class-out;./libs/slf4j-api-1.7.25.jar;./libs/logback-core-1.2.3.jar;./libs/logback-classic-1.2.3.jar** com.zhangxy.App argA argB
- java -XX:+UseParallelGC -XX:+UseParallelOldGC -Xss512K -Xms1408M -Xmx1408M -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:MetaspaceSize=384M -XX:MaxMetaspaceSize=384M -XX:MaxDirectMemorySize=256M -XX:NativeMemoryTracking=detail -Xloggc:…/logs/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause -XX:+PrintTenuringDistribution -XX:+PrintReferenceGC -XX:+PrintGCApplicationStoppedTime -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=…/logs/dump/heap/ -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dname=template -Duser.timezone=Asia/Shanghai -Ddruid.mysql.usePingMethod=false -jar template-web-1.0.0-SNAPSHOT.jar --spring.profiles.active=dev --server.port=8080
- nohup java -jar tqvoip-mediaserver-1.0.1-release.jar >> run.log &
3、打包 jar 文件 – jar
- jar: java 应用程序打包工具,可将多个类文件合并为单个 JAR 归档文件。
- jar cvf helloWorld.jar aaa/HelloWorld.class
4、生成 API 文档 – Javadoc
- Javadoc: Java API 文档生成器从 Java 源程序代码注释中提取文档,生成 API 文档 HTML 页。
- javadoc aaa*.java –d javadoc
5、生成 JNI(Java Native Interface)所需的 C/C++ 头文件
- 核心作用:
- javah 是 JNI 开发中自动生成 C/C++ 头文件的关键工具,
- 避免手动编写复杂的函数签名,确保 Java 与本地代码的正确对接。
- 版本迁移:
- JDK 9+ 使用 javac -h 替代 javah。
- 使用场景
- 1、Java 调用本地代码:
- 当需要在 Java 中调用 C/C++ 编写的函数(如:高性能计算、硬件操作)时。
- 需通过 JNI 实现,而 javah 是生成桥梁代码的关键工具。
- 2、维护 JNI 接口:
- 当 Java 类的本地方法发生变更时,重新生成头文件以保持本地代码与 Java 代码的一致性
6、反编译 class 文件 – javap
- Javap:Java 反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
- javap -v -p ./Test.class
7、Java 进程的监控工具
命令 | 说明 | 常用形式 |
---|---|---|
jps | 查看 java 进程 pid | jps |
jinfo | 查看 jvm 环境与参数 | jinfo pid > a.txt |
jstat | 查看 jvm 内存与 GC 状态 | jstat -gcutil pid 1000 10 |
jstack | 查看 jvm 当前时刻的线程快照 | jstack -l pid |
jmap | 生成 dump 文件 | jmap -dump:live,format=b,file=dump.hprof pid |
jmap | 生成统计信息 | jmap -histo pid |
jhat | dump 分析工具 | jhat dump.hprof |
jvisualvm | 图形界面,基础监控,****资源占用低 | + 内存:堆/非堆内存使用情况(Eden、Survivor、Old Gen 等) + 线程:活动线程数、死锁检测。 + 类加载:已加载类数量。 + MBean 管理:通过 JMX 查看和操作 MBean 属性。 |
jconsole | 图形界面,高级监控,支持插件扩展(Visual GC,BTrace) + Visual GC:实时垃圾回收过程可视化(分代内存变化)。 + BTrace:动态注入诊断代码(需安全权限)。 | JDK8 之后,从 jdk 中移除了,使用需要去下载。 + 内存分析:堆转储(Heap Dump)生成与分析(对象实例分布、引用链追踪)。 + CPU 分析:方法级 CPU 热点抽样(Sampling)和精确追踪(Profiling)。 + 线程分析:线程状态可视化、线程转储(Thread Dump)与死锁检测。 |