一、JDK内置工具 - javap
1、 介绍
java 反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件。
2、命令
javap <options> <classes>
3、命令集
-help --help -? 输出此用法消息 -version 版本信息,其实是当前javap所在jdk的版本信息,不是class在哪个jdk下生成的。 -v -verbose 输出附加信息(包括行号、本地变量表,反汇编等详细信息) -l 输出行号和本地变量表 -public 仅显示公共类和成员 -protected 显示受保护的/公共类和成员 -package 显示程序包/受保护的/公共类 和成员 (默认) -p -private 显示所有类和成员 -c 对代码进行反汇编 -s 输出内部类型签名 -sysinfo 显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列) -constants 显示静态最终常量 -classpath <path> 指定查找用户类文件的位置 -bootclasspath <path> 覆盖引导类文件的位置
二、JDK内置工具 -jps
1、介绍
jps (Java Virtual Machine Process Status Tool) 显示当前所有java金城pid的命令
2、命令
jps <options> <hostid>
3、命令集
-q 只输出进程 ID -m 输出传入 main 方法的参数 -l 输出完全的包名,应用主类名,jar的完全路径名 -v 输出jvm参数 -V 输出通过flag文件传递到JVM中的参数 -Joption 传递参数到vm,例如:-J-Xms512m
三、JDK内置工具 -jstat
1、介绍
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。
2、命令
jstat [generalOption | outputOptions vmid [ interval [ s|ms ] [ count ] ] ]
3、命令合集
-gc pid 显示gc的信息,查看gc的次数,及时间 -gccapacity pid VM分代内存的使用和占用大小 -gcutil pid 统计gc信息统计 -gcnew pid 年轻代对象的信息 -gcnewcapacity pid 年轻代对象的信息及其占用量 -gcold pid old代对象的信息 -gcoldcapacity pid old代对象的信息 -gcpermcapacity pid perm对象的信息及其占用量 -class pid 显示加载class的数量,及所占空间等信息 -compiler pid 显示VM实时编译的数量等信息 -printcompilation pid 当前VM执行的信息

四、JDK内置工具 - jcmd
1、介绍
看Java进程、导出线程信息、执行GC、还可以进行采样分析(jmc 工具的飞行记录器)。
2、命令
jcmd <pid | main class> <command ... | PerfCounter.print | -f file>
3、命令合集
pid help 查看本地的java进程列表,获取其pid pid VM.uptime 查看 JVM 的启动时长 pid GC.class_histogram 查看 JVM 的类信息,这个可以查看每个类的实例数量和占用空间大小。 pid Thread.print 查看 JVM 的Thread Dump pid GC.heap_dump FILE_NAME 查看 JVM 的Heap Dump,注意,如果只指定文件名,默认会生成在启动 JVM 的目录里。 pid VM.system_properties 查看 JVM 的属性信息 pid VM.flags 查看 JVM 的启动参数,注意,可以看到 -X 和 -XX 的参数信息 pid VM.command_line 查看 JVM 的启动命令行 pid GC.run_finalization 对 JVM 执行 java.lang.System.runFinalization(),尽量b别去调用这个对象的finalize方法。 pid GC.run 对 JVM 执行 java.lang.System.gc(),告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的 PID PerfCounter.print 查看 JVM 的性能
五、JDK内置工具 -jinfo
1、介绍
主要用于打印配置信息,包括命令行参数、系统变量。极少数的情况下,我们可以用其来修改命令行参数。
2、命令
jinfo <option> <pid>
3、命令合集
-gc pid 显示gc的信息,查看gc的次数,及时间 -gccapacity pid VM分代内存的使用和占用大小 -gcutil pid 统计gc信息统计 -gcnew pid 年轻代对象的信息 -gcnewcapacity pid 年轻代对象的信息及其占用量 -gcold pid old代对象的信息 -gcoldcapacity pid old代对象的信息 -gcpermcapacity pid perm对象的信息及其占用量 -class pid 显示加载class的数量,及所占空间等信息 -compiler pid 显示VM实时编译的数量等信息 -printcompilation pid 当前VM执行的信息
六、JDK内置工具 - jcmd
1、介绍
看Java进程、导出线程信息、执行GC、还可以进行采样分析(jmc 工具的飞行记录器)。
2、命令
jcmd <pid | main class> <command ... | PerfCounter.print | -f file>
3、命令合集
参数说明 pid 对应jvm的进程id executable core 产生core dump文件 [server-id@]remote server IP or hostname 远程的ip或者hostname,server-id标记服务的唯一性id option no option 输出全部的参数和系统属性 -flag name 输出对应名称的参数 -flag [+|-]name 开启或者关闭对应名称的参数 -flag name=value 设定对应名称的参数 -flags 输出全部的参数 -sysprops 输出系统属性
七、JDK内置工具 -jinfo
1、介绍
主要用于打印配置信息,包括命令行参数、系统变量。极少数的情况下,我们可以用其来修改命令行参数。
2、命令
jinfo <option> <pid>
3、命令合集
-gc pid 显示gc的信息,查看gc的次数,及时间 -gccapacity pid VM分代内存的使用和占用大小 -gcutil pid 统计gc信息统计 -gcnew pid 年轻代对象的信息 -gcnewcapacity pid 年轻代对象的信息及其占用量 -gcold pid old代对象的信息 -gcoldcapacity pid old代对象的信息 -gcpermcapacity pid perm对象的信息及其占用量 -class pid 显示加载class的数量,及所占空间等信息 -compiler pid 显示VM实时编译的数量等信息 -printcompilation pid 当前VM执行的信息
八、JDK内置工具 - jhat
1、介绍
主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。
2、命令
jhat [ options ] heap-dump-file
3、命令合集
-J< flag > 因为 jhat 命令实际上会启动一个JVM来执行, 通过 -J 可以在启动JVM时传入一些启动参数. 例如, -J-Xmx512m 则指定运行 jhat 的Java虚拟机使用的最大堆内存为 512 MB. 如果需要使用多个JVM启动参数,则传入多个 -Jxxxxxx -stack false|true 关闭跟踪对象分配调用堆栈。如果分配位置信息在堆转储中不可用. 则必须将此标志设置为 false. 默认值为 true. -refs false|true 关闭对象引用跟踪。默认情况下, 返回的指针是指向其他特定对象的对象,如反向链接或输入引用(referrers or incoming references), 会统计/计算堆中的所有对象。 -port port-number 设置 jhat HTTP server 的端口号. 默认值 7000。 -exclude exclude-file 指定对象查询时需要排除的数据成员列表文件。 例如, 如果文件列出了 java.lang.String.value , 那么当从某个特定对象 Object o 计算可达的对象列表时, 引用路径涉及 java.lang.String.value 的都会被排除。 -baseline exclude-file 指定一个基准堆转储(baseline heap dump)。 在两个 heap dumps 中有相同 object ID 的对象会被标记为不是新的(marked as not being new). 其他对象被标记为新的(new). 在比较两个不同的堆转储时很有用。 -debug int 设置 debug 级别. 0 表示不输出调试信息。 值越大则表示输出更详细的 debug 信息。 -version 启动后只显示版本信息就退出。
九、JDK内置工具 -jinfo
1、介绍
主要用于打印配置信息,包括命令行参数、系统变量。极少数的情况下,我们可以用其来修改命令行参数。
2、命令
jinfo <option> <pid>
3、命令合集
-gc pid 显示gc的信息,查看gc的次数,及时间 -gccapacity pid VM分代内存的使用和占用大小 -gcutil pid 统计gc信息统计 -gcnew pid 年轻代对象的信息 -gcnewcapacity pid 年轻代对象的信息及其占用量 -gcold pid old代对象的信息 -gcoldcapacity pid old代对象的信息 -gcpermcapacity pid perm对象的信息及其占用量 -class pid 显示加载class的数量,及所占空间等信息 -compiler pid 显示VM实时编译的数量等信息 -printcompilation pid 当前VM执行的信息
十、JDK内置工具 - jhat
1、介绍
打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。它的用途是为了展示java进程的内存映射信息,或者堆内存详情。
2、命令
jmap [ option ] pid (to connect to remote debug server) jmap [ option ] executable core (to connect to remote debug server) jmap [ option ] [server-id@]remote-hostname-or-IP (to connect to remote debug server)
3、命令合集
-histo[:live] <pid> 通过histo选项,打印当前java堆中各个对象的数量、大小。如果添加了live,只会打印活跃的对象。 -dump:[live,]format=b,file=<filename> <pid> 通过-dump选项,把java堆中的对象dump到本地文件,然后使用MAT进行分析。 如果添加了live,只会dump活跃的对象。 -heap <pid> 通过-heap选项,打印java堆的配置情况和使用情况,还有使用的GC算法。 -finalizerinfo <pid> 通过-finalizerinfo选项,打印那些正在等待执行finalize方法的对象。 -permstat <pid> 通过-permstat选项,打印java堆永久代的信息,包括class loader相关的信息,和interned Strings的信息。
十一、JDK内置工具 - jhat
1、介绍
查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。
2、命令
jhat -options
3、命令合集

十二、JDK内置工具 - jconsole
1、介绍
一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。
2、命令
windows的bin目录里面

3、界面

查看,参看堆内存,非堆内存,内存池的状况总体内存的分配和使用情况以及不同的GC进行垃圾回收的次数和时间。可以手动进行GC查看内存变化。在分析JAVA内存问题进行调优时候非常有用,你要学习JVM内存模型,之后会发现这里的每个值都具有意义。 GC的算法和参数对性能有显著的影响,注意垃圾回收次数、时间、以及partial GC和full GC,调整所使用的不同GC和以及各个GC下的参数,然后在这个视图下观察,以得到好的性能。现在流行微服务,同一个服务可能是多台,所以这个命令更多的使用在测试环境单台机器上。
十三、JDK内置工具 - jvisualvm
1、介绍
用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump、Thread Dump、内存对象实例情况、GC执行情况、CPU消耗以及类的装载情况
2、命令
windows的bin目录里面

3、 界面

VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的).从界面上看还是比较简洁的,左边是树形结构,自动显示当前本机所运行的Java程序,还可以添加远程的Java VM,其中括号里面的PID指的是进程ID。OverView界面显示VM启动参数以及该VM对应的一些属性。Monitor界面则是监控Java堆大小,Permgen大小,Classes和线程数量。

java反汇编_Java虚拟机学习总结(3)——JDK内置工具(jps、jstack、jmap、jstat)使用详解...相关推荐

  1. Java虚拟机学习总结(3)——JDK内置工具(jps、jstack、jmap、jstat)使用详解

    一.JDK内置工具 - javap 1. 介绍 java 反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件. 2.命令 javap <options> <clas ...

  2. JDK内置工具--jconsole

    jconsole是一个JAVA GUI监视工具.它可以查看到内存.线程.类及CPU使用的一些情况. 直接在命令行输入jconsole,然后选择进程即可. 转载于:https://www.cnblogs ...

  3. JDK内置工具之appletviewer

    appletviewer用于在Web浏览器外部运行applet. 基本用法:appletviewer <options> url. option为选项部分,多个选项用空格分隔.url要显示 ...

  4. JVM-2.jdk自带内置工具

    文章目录 1. 概要 2. JPS 3. jstat---性能分析 4. jmap--堆内存分析 4.1 打印java堆详情 4.2 打印堆中对象的统计信息 4.3 dump出堆内存信息 4.4 触发 ...

  5. JDK内置命令行工具

    java命令行 序号 接口 java Java 应用的启动程序 javac JDK 内置的编译工具 javap 反编译 class 文件的工具 javadoc 根据 Java 代码和标准注释,自动生成 ...

  6. jdk内置线程实例_EA问题的JDK14实例

    jdk内置线程实例 Tagir Valeev最近发布了一条有关即将发布的Java JDK14版本的预览功能的推文: #Java14模式匹配将名称隐藏带入了更高的疯狂程度. 在这里,我为FLAG字段添加 ...

  7. JDK 内置命令行工具:工欲善其事,必先利其器

    很多情况下,JVM 运行环境中并没有趁手的工具,所以掌握基本的内置工具是一项基本功. JDK 自带的工具和程序可以分为 2 大类型: 开发工具 诊断分析工具 JDK 内置的开发工具 写过 Java 程 ...

  8. 6. JDK内置命令行工具

    JDK自带的工具和程序分为2大类型: 开发工具 诊断分析工具 开发工具 工具 简介 java Java 应用的启动程序 javac JDK 内置的编译工具 javap 反编译 class 文件的工具 ...

  9. Log4j日志的简单替代:JDK内置log的简单封装

    前段时间Log4j爆出严重漏洞,其实我一直都不太喜欢这个臃肿的框架. 下面代码对JDK内置的log简单地封装了一下.直接复制到项目即可用.更不需要maven. 使用方法看main函数. import ...

  10. JDK内置并发AQS同步器的独占锁获取与释放

    作者简介:笔名seaboat,擅长工程算法.人工智能算法.自然语言处理.计算机视觉.架构.分布式.高并发.大数据和搜索引擎等方面的技术,大多数编程语言都会使用,但更擅长Java.Python和C++. ...

最新文章

  1. 使用MrBayes构建贝叶斯系统发育树【实践】
  2. sublime tex创建可服用的片段
  3. Java并发工具类(闭锁CountDownLatch)
  4. Orchard CMS前台页面为什么没有Edit链接?
  5. leetcode 69. x 的平方根 思考分析
  6. netty心跳过程中 发送消息失败_Netty 4.0 实现心跳检测和断线重连
  7. 【bzoj5110】[CodePlus2017]Yazid 的新生舞会 Treap
  8. java的动态绑定是什么意思_Java的动态绑定机制
  9. InstallShield - Kevin Wan的博文索引
  10. 原生ajax、XMLHttpRequest和FetchAPI简单描述
  11. OpenCV图像处理之直方图
  12. 教学向|如何快速入门maya制作动画,萌新也能冲
  13. LCD6210字符型液晶显示器 (1)
  14. 盘点 | 2022年国内重大数据安全事件
  15. 未明学院:看了这份途牛数据报告,我终于明白为什么大部分人还是选择跟团游……
  16. 杭州电子科技大学acm---2010
  17. FPGA学习——数字密码锁(上)
  18. 解决Themida加壳程序在VMware虚拟机无法运行问题_HS_TMD
  19. 网络编程(TCP、MyIE、URL)
  20. C# 中 EmguCV bitmap 和Image 互转

热门文章

  1. karto探秘之文章索引
  2. Structure from Motion综述
  3. python中的多线程(一)
  4. 【C#夯实】我与接口二三事:IEnumerable、IQueryable 与 LINQ
  5. 【Java例题】7.5 文件题2-学生成绩统计
  6. [转][ASP.net]后台页面刷新
  7. ubuntu 12.04 安装Docker 实战
  8. 给大家推荐一本书啊啊~
  9. 通过过滤器获取表单元素
  10. 蒙提霍尔问题(三门问题,概率论)C语言验证