必须熟练使用JDK自带命令:javac编译、java运行、javadoc生成API文档、javap反编译字节码、jps/jstat/jstack监控JVM进程、jar打包,它们是不依赖IDE的底层调试与部署核心能力。

要快速执行 Java 程序、反编译字节码、查看 JVM 进程、生成 API 文档或打包项目,必须熟练使用 JDK 自带的命令行工具,它们不依赖 IDE,直接作用于源码和 class 文件,是调试与部署环节不可替代的底层能力。
编译与运行:javac 和 java
第一步:确保当前目录下有 Hello.java 文件,内容为 public class Hello { public static void main(String[] args) { System.out.println("OK"); } }。
第二步:执行 【javac Hello.java】,成功后生成 Hello.class;若报错“类名与文件名不一致”,说明 public 类名未严格匹配文件名(大小写敏感),必须修正。
第三步:执行 【java Hello】(注意不加 .class 后缀),控制台输出 OK。如果提示“找不到或无法加载主类”,常见原因是当前路径不对,或 CLASSPATH 被意外污染——此时直接 cd 到 .class 所在目录再运行即可。
立即学习“Java免费学习笔记(深入)”;
生成 API 文档:javadoc
方法一:基础用法
在含 public 类且含标准注释(/** ... */)的源码目录中,运行 javadoc -d docs *.java,docs 目录将生成完整 HTML 文档结构。
方法二:指定编码防乱码
若源码含中文注释,必须加 -encoding UTF-8 -docencoding UTF-8 -charset UTF-8,否则生成的 HTML 中文字显示为方块。
注意:javadoc 只解析以 /** 开头、*/ 结尾的块注释,单行 // 注释不会被提取。
反编译查看字节码:javap
执行 javap -c Hello.class 查看 Hello 类的字节码指令流,每条指令对应 JVM 的一个操作,比如 iconst_1 表示压入整数 1,astore_1 表示存入局部变量表第 1 槽位。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
加 -verbose 参数可显示常量池、访问标志、异常表等完整结构,但输出冗长,仅在排查类加载失败或签名错误时才需启用。
javap 不是万能反编译器——它只展示编译后的结构,不能还原原始变量名或逻辑注释,想看可读性高的源码级反编译,请用第三方工具如 CFR 或 JD-GUI。
JVM 进程监控:jps、jstat、jstack
① jps -l 列出所有 Java 进程的完整主类路径,比单纯看 PID 更准确定位是哪个应用。
② jstat -gc 【PID】 1000 3 每秒刷新一次 GC 统计,连续采样 3 次;若 S0C/S1C 长期为 0 且 EC 持续增长,说明 Survivor 区未启用或 Eden 区过小,可能触发频繁 Minor GC。
③ jstack 【PID】 > thread.log 导出当前线程快照,重点检查 TIMED_WAITING 状态线程是否集中阻塞在某把锁或某次远程调用上——这是定位死锁和响应延迟的第一手证据。
打包归档:jar
打包普通类库:jar -cf utils.jar com/example/StringUtils.class com/example/NumberUtils.class。
打包可执行 JAR:先写好 MANIFEST.MF,其中必须含 Main-Class: com.example.Main(结尾空行不能少),再执行 jar -cmf MANIFEST.MF app.jar *.class。
jar 命令不校验 MANIFEST 中声明的主类是否存在,运行时才报错;因此打包后务必用 java -jar app.jar 验证一次,避免交付失效包。

















