JDK 命令行工具大全与学习方法总结 —— 从帮助文档到高效实践
Java开发与运维过程中,JDK自带的命令行工具是定位问题、性能调优、编译调试的基石。本文全面梳理JDK常用命令工具、帮助文档的获取方式,并总结类似Linux命令行的学习方法,助你系统掌握并高效应用。
一、JDK 命令工具全家桶
JDK自带的命令工具覆盖编译、打包、监控、调试、性能分析等全生命周期。常见命令如下:
工具 | 主要用途 | 典型命令 | 简要说明 |
---|---|---|---|
java | 启动Java应用 | java -version | 启动参数、版本信息 |
javac | Java源码编译 | javac Hello.java | 生成class文件 |
jar | 打包/解包jar文件 | jar cf app.jar *.class | 类似zip命令 |
javadoc | 生成API文档 | javadoc MyClass.java | 生成html文档 |
javap | 反编译class文件 | javap -c MyClass | 查看字节码指令 |
jdb | Java调试器 | jdb Hello | 命令行调试 |
jps | 列出本机Java进程 | jps -l | 查看pid和主类 |
jstack | 导出线程栈 | jstack | 死锁、卡顿排查 |
jmap | 堆转储、内存分析 | jmap -histo | 内存泄漏分析 |
jstat | JVM运行/GC统计 | jstat -gc | 监控GC/内存分布 |
jinfo | 查询/调整JVM参数 | jinfo -flags | JVM参数核查 |
jcmd | 现代诊断瑞士军刀 | jcmd help | 动态诊断,功能覆盖jmap/jstack/jinfo等 |
jshell | Java交互式命令行 | jshell | 类似Python REPL |
jlink | 模块化自定义JRE | jlink --module-path … | JDK9+,生成精简JRE |
jdeps | 依赖分析工具 | jdeps MyApp.jar | 分析类/模块依赖 |
jstatd | JVM远程监控守护进程 | jstatd | 支持jstat/jconsole远程监控 |
jfr/jmc | Java Flight Recorder/Java Mission Control | jfr start …, jmc | 运行时性能剖析,JDK11+ |
jhat (过时) | 堆分析Web工具 | jhat heap.hprof | 已被MAT/VisualVM替代 |
提示:JDK bin 目录下还有许多命令,可用 ls $JAVA_HOME/bin
查看。
二、如何查看JDK命令帮助文档
1. 命令行自带帮助参数
- 通用格式:
命令 -h
或命令 --help
- 示例:
javac --help jmap -h java -help jar --help jcmd help
2. 查看命令详细用法
- 许多命令支持
-help
或-?
jstack -help jstat -help
- 某些命令(如jcmd)需要指定pid或help关键字
jcmd <pid> help
3. 在线官方文档
- Oracle官方文档:https://docs.oracle.com/en/java/javase/
- 选择对应JDK版本,进入“Tools Reference”或“Command-Line Tools”部分。
4. 查看man手册(部分Linux发行版)
- 安装openjdk时,部分命令支持man页:
man javac man java
- 若无man,建议用命令自带的
--help
。
三、类似Linux命令的学习方法
1. 掌握命令基本结构与选项
- 学习每个命令的核心参数(如jps -l、jstack 、jmap -histo )。
- 结合实际排查任务,记住常用组合(如:
jps
找pid,jstack
导线程,jmap
导堆)。
2. 多用帮助文档/示例参数
- 遇到不熟悉的命令或参数,第一时间
--help
或-h
查文档。 - 推荐将常用命令和参数记录在笔记或速查表。
3. 场景化练习——实战驱动记忆
- 编译调试:写个HelloWorld.java,练习
javac
、java
、jar
、javap
、javadoc
。 - 性能诊断:写个死循环/内存泄漏demo,练习
jps
、jstack
、jmap
、jstat
、jcmd
。 - 依赖分析:用
jdeps
分析jar包依赖。 - 交互试验:用
jshell
练习Java语法片段。
4. 结合脚本/自动化
- 类似Linux shell,将JDK命令组合成脚本批量采集信息。
#!/bin/bash pid=$(jps | grep MyApp | awk '{print $1}') jstack $pid > threads.txt jmap -histo $pid > histo.txt
5. 善用官方文档与社区资源
- Oracle/AdoptOpenJDK官方文档。
- StackOverflow、CSDN、博客园等社区经验。
- 关注新JDK版本命令变更(如jcmd、jfr等新工具)。
四、JDK命令学习与排查流程建议
- 定位进程:
jps -l
或ps -ef | grep java
- 基础信息:
jinfo -flags <pid>
、java -version
- 线程问题:
jstack <pid>
或jcmd <pid> Thread.print
- 内存问题:
jmap -histo <pid>
、jmap -dump:format=b,file=heap.hprof <pid>
、jcmd <pid> GC.class_histogram
- GC/内存监控:
jstat -gcutil <pid> 1000 5
- 依赖/模块分析:
jdeps MyApp.jar
- 性能剖析:
jfr
(JDK11+)、jmc
(Java Mission Control)
五、附:JDK命令速查表
场景 | 命令示例 | 说明 |
---|---|---|
查看Java版本 | java -version | JDK版本 |
编译源码 | javac Hello.java | 生成class |
打包jar | jar cf app.jar *.class | jar包操作 |
反编译字节码 | javap -c Hello | 查看字节码 |
生成文档 | javadoc Hello.java | 生成API文档 |
进程列表 | jps -l | 查找目标进程PID |
线程快照 | jstack | 线程分析 |
堆对象分布 | jmap -histo | 内存泄漏排查 |
堆dump | jmap -dump:format=b,file=heap.hprof | 堆分析 |
JVM参数 | jinfo -flags | 参数核查 |
依赖分析 | jdeps app.jar | 模块/包依赖 |
动态诊断 | jcmd help | 现代JVM诊断工具 |
交互实验 | jshell | Java REPL |
六、总结与建议
- JDK命令行工具是Java开发/运维必备技能,类似Linux命令行,建议多用help参数、结合实际问题练习。
- 推荐每次遇到新问题或新命令,先查help,后查官方文档,再实践,逐步形成自己的速查资料。
- 关注JDK版本更新,及时学习新工具(如jcmd、jfr、jmc),提升排查效率。
- 善用脚本自动化、社区经验,积累实战案例。
- 最后,多动手、多总结、多归纳,命令才会真正变成你的工具箱!
建议收藏本博客,遇到JDK命令相关问题时按需查阅,高效定位与解决问题!