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(); } }