You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过控制台计算多线程Java程序的执行时间与内存占用?

解决Java多线程程序的命令行性能分析问题

针对你遇到的主线程先于子线程结束、传统计时方法失效的场景,这里有几个纯命令行的方案来统计执行时间和分析内存占用:

一、统计程序总执行时间

因为你的主线程会提前退出,但整个Java进程要等所有非守护线程结束才会终止,所以可以用系统自带的命令行计时工具直接统计进程的完整运行时间:

Linux/macOS:time命令

直接在启动命令前加上time即可:

time java class1

执行完成后会输出三个时间值:

  • real:从程序启动到完全退出的总墙钟时间(就是你关心的实际耗时)
  • user:程序在用户态消耗的CPU时间总和
  • sys:程序在内核态消耗的CPU时间总和

Windows:PowerShell Measure-Command

打开PowerShell,用以下命令:

Measure-Command { java class1 }

输出会包含TotalSeconds、TotalMilliseconds等精确的时间统计,直接反映进程的完整运行时长。

二、命令行内存占用分析

不用图形化的jconsole,JDK自带了多个纯命令行工具可以分析内存:

1. jps + jstat:实时监控堆内存与GC情况

  • 第一步:用jps找到你的Java进程ID(PID):
    jps -l
    
    这个命令会列出当前运行的Java进程,-l参数会显示主类的全限定名,方便你找到class1对应的PID。
  • 第二步:用jstat实时监控堆内存和GC:
    jstat -gc <你的PID> 1000
    
    其中1000表示每1000毫秒(1秒)输出一次数据,内容包括Eden区、Survivor区、老年代的内存使用量,以及GC的次数和耗时,能帮你观察内存变化趋势。

2. jmap:查看堆内存分布与生成快照

  • 查看堆的整体配置与当前使用情况:
    jmap -heap <你的PID>
    
    会输出堆的大小、新生代/老年代的划分、当前已使用内存等信息。
  • 按类统计内存占用(找出大对象):
    jmap -histo <你的PID>
    
    会列出所有类的实例数量、占用内存大小,按内存排序,方便定位内存占用大户。

3. jcmd:多功能命令行诊断工具

jcmd是JDK 7+自带的多功能工具,能替代多个老工具的功能:

  • 查看堆内存信息:
    jcmd <你的PID> GC.heap_info
    
  • 查看本地内存使用(包括堆外内存):
    jcmd <你的PID> VM.native_memory
    

这些工具都是JDK自带的,无需额外安装,全程命令行操作,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Ankur Parihar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:46:29