java常用命令javac、javap、jps、jstack

本文参考http://www.hollischuang.com/?s=java%E5%91%BD%E4%BB%A4%E5%AD%A6%E4%B9%A0

作为一个java开发人员,应该了解java常用指令,这些指令都是位于JAVE_HOME目录的bin下面,简单介绍下:

1.javac

    这个应该比较熟悉,用来编译java源文件的

    一般执行java文件,如Test.java,先执行javac Test.java, 然后执行java Test即可

2.jps 查看当前用户的java的进程信息

   Java程序启动后,会在java.io.tmpdir指定的临时目录下,生成一个类似于hsperfdata_User的文件夹(windows在C:\Users\Administrator\AppData\Local\Temp\hsperfdata_AdministratorLinux在/tmp/hsperfdata_root,红色为当前登录用户),这个目录下有几个java进程pid命名的文件。

public class JstackDemo {

    public static void main(String[] args) {
          Thread thread = new Thread(new Thread1());
          thread.start();
    }

    static class Thread1 implements  Runnable {
         @Override
         public void run(){
              while(true){
                  System.out.println("Hello World!");
              }
          }
    }
}

执行完javac JstackDemo.java和java JstackDemo后,输入jps指令显示如下图:

 

Jps -m 输出传给main方法的参数,这里传的test1和test2

 

Jps -l 输出class文件的完整package名或者jar文件完整路径名

 

Jps -v 输出传给JVM方法的参数

3. javap 对代码进行反编译

 

   javap -c 输出分解后的java字节码

 

4.  jstack 打印线程栈信息,制作线程Dump,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等

执行jstack -l 2375,线程堆栈信息如下

 

这里可以看到线程的状态:

线程的当前锁住的资源:locked <0x00000000e7754be8>

线程当前等待的资源:waiting on <0x00000000e7754be8>

为什么同时锁住的等待同一个资源:(详细可参考http://www.hollischuang.com/archives/110)

线程的执行中,先获得了这个对象的 Monitor(对应于 locked <0x00000000e7754be8>)。当执行到 obj.wait(), 线程即放弃了 Monitor的所有权,进入“wait set”队列(对应于 waiting on <0x00000000e7754be8> )。

   -F 当jstack -l pid 没有响应的时候强制打印栈信息

   -l 长列表,包含锁的附加信息

   -m 打印java和native c/c++框架的所有栈信息

5.  jstat 性能检测工具,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控(详细可参考http://www.hollischuang.com/archives/481)

jstat –class<pid> : 显示加载class的数量,及所占空间等信息

jstat -compiler <pid>显示VM实时编译的数量等信息

jstat -gc <pid>: 可以显示gc的信息,查看gc的次数,及时间。

6. jmap 打印内存映射,制作栈Dump(详细请参考http://www.hollischuang.com/archives/303)

   jmap -heap 进程id 查看java堆使用情况

   jmap -histo 进程id 查看堆内存中的对象数量及大小

   jmap -dump:format=b,file=headDump <pid> 将内存使用的情况输出到文件

7. jhat 内存分析工具,生成dump文件(可用jmap生成)之后就可以用jhat命令,将dump文件转成html的形式,然后通过http访问可以查看堆情况

  执行jhat -port 40000 heapDump

 

查看详细信息http://localhost:40000

这里是在liunx上的master节点上启动执行的,故使用master域名

 


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值