Java Runtime Environment(JRE)下载

  1. 新手入门优先掌握:java -version(验证环境)、jps(找进程)、jconsole(可视化监控),能解决 80% 的基础问题;

  2. 服务器排查优先用:jstat(GC 监控)、jstack(线程问题)、jmap(内存快照),无图形界面也能精准定位问题;

  3. 所有工具均随 JRE 内置,无需额外安装,直接在命令行执行即可(确保 JRE 的 bin 目录在 Path 环境变量中)。

 

一、基础验证类工具:java(核心运行工具)

功能

这是 JRE 最核心的命令行工具,用于运行 Java 程序(.class/.jar 文件),也可验证 JRE 版本、配置 JVM 参数。

基本用法

bash

运行

java [可选参数] 程序入口类/JAR包路径

实操示例

1. 验证 JRE 版本(最常用)

bash

运行

# 查看JRE版本、架构、虚拟机类型
java -version

输出解读(以 Temurin 17 为例):

plaintext

openjdk version "17.0.9" 2023-10-17 LTS  # JRE版本
OpenJDK Runtime Environment Temurin-17.0.9+9 (build 17.0.9+9-LTS)  # 运行时环境
OpenJDK 64-Bit Server VM Temurin-17.0.9+9 (build 17.0.9+9-LTS, mixed mode, sharing)  # JVM类型(64位Server VM)

2. 运行 JAR 包(桌面 / 服务器程序通用)

bash

运行

# 基础运行(默认堆内存)
java -jar demo.jar

# 自定义堆内存运行(解决内存溢出)
java -Xms256m -Xmx1024m -jar demo.jar  # 初始堆256M,最大堆1G

# 无控制台运行桌面程序(Windows专属,避免控制台窗口)
javaw -jar desktop-app.jar

3. 查看 JVM 默认参数(调优前参考)

bash

运行

java -XX:+PrintFlagsFinal -version

用途:查看 JRE 默认的堆内存、GC 收集器等配置,为调优提供基准。

二、进程查看工具:jps(Java Process Status)

功能

相当于 Java 版 “任务管理器”,快速查看当前运行的所有 Java 进程(PID + 程序名),无需在系统任务管理器里逐个找。

基本用法

bash

运行

jps [可选参数]

常用参数:

  • -l:显示程序完整入口类 / JAR 包路径(最实用);
  • -v:显示进程的 JVM 启动参数;
  • -m:显示程序运行时传入的参数。

实操示例

1. 基础查看 Java 进程

bash

运行

jps

输出示例

plaintext

12345 demo.jar  # PID=12345,运行的程序是demo.jar
67890 Jps       # Jps自身的进程(每次运行都会生成)

2. 查看完整路径 + JVM 参数

bash

运行

jps -lv

输出示例

plaintext

12345 com.example.DemoApplication -Xms256m -Xmx1024m  # 完整类名+JVM参数
67890 sun.tools.jps.Jps -lv  # Jps自身进程

用途:确认目标程序是否用了预期的 JVM 参数(比如堆内存是否配置正确)。

三、可视化监控工具:jconsole

功能

图形化工具,实时监控 Java 程序的内存、线程、GC、类加载等状态,新手也能快速定位内存飙升、线程阻塞问题。

基本用法

bash

运行

# 直接启动,自动扫描本机Java进程
jconsole

# 连接远程服务器的Java进程(需配置远程调试)
jconsole 远程IP:端口

实操步骤(新手必看)

  1. 执行jconsole,弹出窗口后选择要监控的 Java 进程(比如 PID=12345 的 demo.jar),点击 “连接”;
  2. 进入监控界面后,重点看这几个标签:
    • 内存:查看堆 / 非堆内存使用趋势,若内存持续上涨不下降,可能有内存泄漏;
    • 线程:查看线程数量,点击 “检测死锁” 可自动排查死锁(超实用);
    • GC:查看垃圾回收次数、耗时,判断 GC 是否频繁(频繁 GC 会导致程序卡顿);
    • :查看已加载的类数量,确认是否有类加载异常。

四、深度分析工具:jvisualvm(Java VisualVM)

功能

比 jconsole 更强大的可视化分析工具,支持内存快照分析、线程快照、GC 日志分析、插件扩展,是排查内存泄漏、死锁的核心工具。

基本用法

bash

运行

# 直接启动(JDK 8内置,JDK 11+需单独下载/安装插件)
jvisualvm

实操示例(排查内存泄漏)

  1. 启动 jvisualvm,左侧选择目标 Java 进程;
  2. 点击 “监视器” 标签 → 点击 “堆 dump”,生成内存快照文件(.hprof);
  3. 打开快照文件,切换到 “类” 标签,按 “实例数” 排序,若某个类的实例数异常多(比如几十万),大概率是内存泄漏(比如集合未释放引用);
  4. 可选:安装 “Visual GC” 插件(工具→插件→可用插件),直观查看 GC 分代内存使用情况。

五、GC 监控工具:jstat(JVM Statistics Monitoring Tool)

功能

命令行版 GC 监控工具,实时输出 GC 的详细统计数据(适合服务器无图形界面的场景),精准分析 GC 频率、耗时、内存回收效果。

基本用法

bash

运行

jstat -<选项> <进程PID> <采样间隔(ms)> <采样次数>

核心选项:

  • -gc:查看堆内存 + GC 整体统计;
  • -gcutil:以百分比显示 GC 统计(最常用);
  • -gccause:显示 GC 原因(比如是 YGC 还是 Full GC,以及触发原因)。

实操示例

1. 实时监控 GC(每 1 秒采样 1 次,共采样 10 次)

bash

运行

jstat -gcutil 12345 1000 10

输出示例

plaintext

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00  50.00  30.00  90.00  85.00     10    0.500     2    1.000    1.500

字段解读(新手重点看):

  • S0/S1:新生代 Survivor 区使用百分比;
  • E:新生代 Eden 区使用百分比;
  • O:老年代使用百分比;
  • YGC:Young GC 次数,YGCT:YGC 总耗时;
  • FGC:Full GC 次数,FGCT:Full GC 总耗时;
  • GCT:GC 总耗时。

判断异常:若 FGC 次数频繁(比如 1 分钟几次),说明老年代内存不足,需调大堆内存或优化 GC 策略。

六、线程排查工具:jstack(Java Stack Trace)

功能

导出 Java 进程的线程快照(堆栈信息),核心用于排查死锁、线程阻塞、CPU 占用过高问题(服务器排查必备)。

基本用法

bash

运行

jstack <进程PID> > 线程快照.txt  # 导出快照到文件,方便分析

实操示例(排查死锁)

  1. 先用jps获取目标进程 PID(比如 12345);
  2. 执行命令导出线程快照:

    bash

    运行

    jstack 12345 > thread_dump.txt
    
  3. 打开thread_dump.txt,搜索关键词:
    • Deadlock:直接定位死锁(jstack 会自动标记死锁线程);
    • BLOCKED:查看阻塞的线程,分析阻塞原因(比如锁竞争);
    • RUNNABLE:查看 CPU 占用高的线程(结合 top 命令)。

示例死锁提示

plaintext

Found one Java-level deadlock:
=============================
Thread 1:
  waiting to lock monitor 0x00007f8e9a006800 (object 0x000000076ab82000, a java.lang.Object),
  which is held by Thread 2
Thread 2:
  waiting to lock monitor 0x00007f8e9a008c00 (object 0x000000076ab82010, a java.lang.Object),
  which is held by Thread 1

直接就能看出哪两个线程互相锁死,快速定位代码问题。

七、内存分析工具:jmap(Java Memory Map)

功能

导出 Java 进程的内存快照(堆转储),或查看内存使用概况,配合 jvisualvm/Mat 工具分析内存泄漏。

基本用法

bash

运行

# 导出堆内存快照(常用)
jmap -dump:format=b,file=内存快照.hprof <进程PID>

# 查看堆内存使用概况
jmap -heap <进程PID>

实操示例

  1. 导出内存快照:

    bash

    运行

    jmap -dump:format=b,file=demo_heap.hprof 12345
    
  2. 用 jvisualvm 打开demo_heap.hprof,分析哪些对象占用内存最多;注意:导出快照会短暂暂停程序(毫秒级),生产环境建议低峰期执行。

典型使用流程

遇到 Java 程序卡顿 → 用jps找 PID → 用jstat看 GC 是否频繁 → 用jconsole监控内存 / 线程 → 用jstack排查死锁 / 阻塞 → 用jmap导出快照分析内存泄漏。

 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐