JITWatch[5]是HSDIS经常搭配使用的可视化的编译日志分析工具,为便于在JITWatch中读取,读 者可使用以下参数把日志输出到logfile文件:
示例代码
-XX:+UnlockDiagnosticVMOptions -XX:+TraceClassLoading -XX:+LogCompilation -XX:LogFile=/tmp/logfile.log -XX:+PrintAssembly
-XX:+TraceClassLoading
import java.util.concurrent.*;
public class MemoryLeak {
// no limit!
private static BlockingQueue<byte[]> queue = new LinkedBlockingQueue<>();
public static void main(String[] args) {
Runnable producer = () -> {
while (true) {
// generates 1mb of object every 10ms
queue.offer(new byte[1 * 1024 * 1024]);
try {
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Runnable consumer = () -> {
while (true) {
try {
// process every 100ms
queue.take();
TimeUnit.MILLISECONDS.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
// give a name, good for profiling
new Thread(producer, "Producer Thread").start();
new Thread(consumer, "Consumer Thread").start();
}
}
我们从github下载JITWatch
https://github.com/AdoptOpenJDK/jitwatch/releases
启动
D:\jdk>java -jar jitwatch-ui-1.4.7-shaded-win.jar
配置和打开生成的文件,可以对应源码查看转化后的汇编语言指令