-
原来在idea用了JITWatch插件,但是效果不好,换成直接使用。需要先安装hsdis、然后从github拉JITWatch的代码,然后编译使用;
-
安装hsdis-amd64.dll,hsdis-amd64.dll下载地址,下载后放入如下目录F:\LAMP\Java\jdk1.8.0_45\jre\bin\server,和jvm.dll一起
-
拉github代码,JITWatch源码地址,然后使用"gradlew clean build run"进行构建,报了网络错误,将仓库设置为了阿里云仓库。在"C:\Users\Rail.gradle"新增init.gradle文件如下:
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')|| url.startsWith('https://plugins.gradle.org/m2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
remove repo
}
}
}
maven {
url REPOSITORY_URL
}
}
}
后面报错
13:53:42.844 [DEBUG] [org.apache.http.conn.ssl.SSLConnectionSocketFactory] Connecting socket to repo.jfrog.org/52.2.106.171:443 wit
h timeout 30000
超过30s还是不通,使用了系统代理:
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080
systemProp.https.nonProxyHosts=www.baidu.com|localhost
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080
systemProp.https.nonProxyHosts=www.baidu.com|localhost
接着报错
Error:java: Illegal char <:> at index 48: jitwatch Could not resolve org.slf4j:slf4j-api:1.7.12.
在idea点击的项目structure处理一下,或者重新导入。gradle构建还是一直失败。
- 换成maven构建,很快就成功了。使用如下参数:
-server
-XX:+UnlockDiagnosticVMOptions
-XX:+TraceClassLoading
-XX:+PrintAssembly
-XX:+LogCompilation
-XX:LogFile=live.log
运行如下代码:
public class VolatileAssembly {
public static void main(String[] args){
int sum = 0;
for(int i = 0; i < 100000; i++){
sum += addOne();
}
System.out.println("sum = " + sum);
}
public static int addOne( ){
int a = 2;
int b = 1;
int c = a + b;
int d = c/2;
int e = c + d;
int f = a + e;
List<Integer> arr = sort();
return f + arr.get(1);
}
/**
* 增加代码复杂度,不然看不到jit的效果
* @return
*/
public static List<Integer> sort(){
List<Integer> arr = new ArrayList<>();
arr.add(3);
arr.add(1);
arr.add(5);
arr.add(2);
arr.add(4);
int len = arr.size();
for(int i = 0; i <len; i++){
for(int j = i; j < len - 1; j++){
if(arr.indexOf(j) > arr.indexOf(j + 1)){
int temp = arr.indexOf(j);
arr.set(j, arr.indexOf(j + 1));
arr.set(j + 1,temp);
}
}
}
return arr;
}
}
- 上面已经通过maven构建好了JITWatch,打开launchUI.bat ,选择config,配置源码和class文件,然后点击"open log"选择上一步输出的live.log。点击start
- 可以探索了: