jvm系列六、windows用jdk自带工具jps、jstack找出性能最差的代码

一、运行程序TestGC


二、用jps找出当前应用的进程号PID
 到jdk安装目录的bin目录下输入: jps -l

PID为1264

三、启动Process Explorer(下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer)
1.找到PID为1264的进程,右键properties
2.看到该进程的所有线程的性能排序
3.找到名字为javaw.exe(eclipse启动)的两个线程,线程TID:10440,10308,其他为jvm线程可能是GC线程

四、jtack工具收集该进程日志
1.命令输入:jstack 1264 >1264.out

2.bin目录发现,已经保存该日志文件了

3.打开1264.out看到线程运行情况,线程ID是十六进制的

4.把上面找到排名靠前的TID:10440,10308,转成16进制为:

5.在日志中搜索该TID,找到对应代码


大功告成!

测试类如下:

package main.sort;

import java.util.ArrayList;

import javax.print.attribute.standard.MediaName;

public class TestGC {
    
    public static void main(String[] args) {
        byte[] array=new byte[1024*64];
        ArrayList<byte[]> list=new ArrayList<byte[]>();
        new Thread(new MyThread()).start();
        
        while(true){
            list.add(array);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }
    

}
package main.sort;

public class MyThread implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        testStack();
    }
    
    public void testStack(){
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        testStack();
    }
}

 



posted on 2018-03-16 17:15  小人物的奋斗  阅读(2281)  评论(0编辑  收藏  举报

导航