Java 性能优化笔记

109 阅读2分钟

常用指令

  • jmp 查看内存中对象的个数和大小

jmp -histo pid | more

通过这个指令统计出来的对象,不一定全是存活的对象,有些对象生命周期已经结束,但是还未到 GC 的时候,所以未被回收。
可以通过

jmap -histo:live pid | more

来强制执行一次 GC 再统计内存中的对象数.

  • jstack - 生成线程快照

    能快速定位线程出现死锁、死循环、外部资源等待等长时间停止状态问题。jstack 命令用于生成虚拟机当前时刻的线程快照

  • jmap 堆转储(分析堆里的详细信息:内存溢出)

    观察运行中的jvm物理内存的占用情况(如:产生哪些对象,及其数量),常用于导出堆内存现状供 mat(Memory Analysis Tool)内存分析工具分析可疑的内存泄露情况。

  • jconsole - 内置 Java 性能分析器

    可以通过命令行或在 GUI shell 中运行,可以轻松地使用 jconsole 来监控 Java 应用程序性能和跟踪 java 中的代码。

  • jps - Java 程序性能诊断工具

    jps 全称:Java Virtual Machine Process Status Tool

    作用:jps 主要用来输出 JVM 中运行的进程状态信息,且只显示当前用户启动的

  • jstat - 监控虚拟机资源和性能的命令行工具

    可以展示本机或者远程虚拟机进程中的类装载、内存、垃圾回收、JIT 编译等运行数据

  • jinfo - 查看和修改虚拟机的参数

    用于打印指定 Java 进程、核心文件或远程调试服务器的 Java 配置信息,配置信息包括 Java 系统属性、Java 虚拟机命令行标识参数。

  • javap - JDK 自带的反解析工具

    它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息 一般常用的是-v -l -c三个选项:

    • javap -v classxx

      不仅会输出行号、本地变量表信息、反编译汇编代码,还会输出当前类用到的常量池等信息

    • javap -l

      输出行号和本地变量表信息

    • javap -c

      对当前class字节码进行反编译生成汇编代码