精华内容
下载资源
问答
  • jitwatch指南

    2020-09-30 00:08:11
    jitwatch使用指南,可以分析多线程可见性问题,以及汇编语言的操作过程,如果还要什么资料的可以留言
  • Android代码-jitwatch

    2019-08-06 07:55:09
    JITWatch Log analyser and visualiser for the HotSpot JIT compiler. Video introduction to JITWatch video Slides from my LJC lightning talk on JITWatch slides For instructions and screenshots see the ...
  • JITWatch HotSpot JIT编译器的日志分析器和可视化工具。 JITWatch 视频介绍 我在JITWatch 上的LJC闪电演讲中的 有关说明和屏幕截图,请参见Wiki。 JITWatch用户界面是使用JavaFX构建的。 这包含在Oracle JDK中。 ...
  • NULL 博文链接:https://yunjiechao-163-com.iteye.com/blog/2386423
  • JIT的Profile神器JITWatch

    万次阅读 2020-07-05 17:13:50
    快来和小师妹一起来学习JITWatch吧。 什么是JIT 小师妹,F师兄,JIT就是Just In Time compilers。能不能再总结一下JIT到底是做什么的呢? 当然没问题,JIT主要有两个作用,第一个作用大家应该已经知道了,就是在运行...

    简介

    老是使用命令行工具在现代化社会好像已经跟不上节奏了,尤其是在做JIT分析时,使用LogCompilation输出的日志实在是太大了,让人望而生畏。有没有什么更加简便的方法来分析JIT日志呢?快来和小师妹一起来学习JITWatch吧。

    什么是JIT

    小师妹,F师兄,JIT就是Just In Time compilers。能不能再总结一下JIT到底是做什么的呢?

    当然没问题,JIT主要有两个作用,第一个作用大家应该已经知道了,就是在运行时将byte code编译成为机器码,提高程序的执行速度。

    第二个作用就是在运行时对代码进行优化,同样的也对性能进行提升。

    JIT中有两种编译器,C1代表的是Client Compiler,C2代表的是Server Compiler。

    其中C1只是简单的编译,而C2在收集到更多信息之后,会进行更加深入的编译和优化。

    常见的优化手段有:Loop unrolling, Inlining, Dead Code Elimination,Escape analysis, Intrinsics, Branch prediction等。

    JDK8中会默认启动分层编译。你也可以使用-XX:+TieredCompilation来手动启动它。

    更多精彩内容且看:

    JITWatch简介

    小师妹:F师兄,上次你讲的LogCompilation和PrintCompilation输出结果还是太复杂了,尤其是LogCompilation,输出的结果有十几M,分析起来好难。有没有更简单一点的办法,让我的工作效率加倍呢?

    这个必须有,有需求就有市场,有需求就有大神出场。今天给你介绍一个工具叫做JITWatch。

    JITWatch是一个大神做的JIT日志的可视化分析工具。在使用它之前你可能觉得它有点强大,在使用后你就会觉得它真的是强大。

    运行JITWatch

    小师妹:F师兄,这么强大的工具,快快介绍我使用吧。

    完全没有问题,不过JITWatch没有现成的打包好的可执行文件。没错,你需要到github上面下载源码。

    下载完毕,可以执行:

    mvn clean compile test exec:java
    

    就可以开启JITWatch之旅了。

    JITWatch详解

    小师妹:F师兄,这么好用的工具为什么不打个包出来让大家直接用呢?还要下载源码这么麻烦。

    其实吧,JITWatch为了大家方便使用,自带一个Sandbox功能,提供了一些可以直接在JITWatch中运行的代码,同时JITWatch可以实现源码的实时比对功能。所以需要大家下载源码。

    闲话休提,我们开启JITWatch之旅吧。

    入眼就是如此朴实无华的界面,让人感觉总有点…重剑无锋,大巧不工。高手做的UI就是这么的完美。

    接下来我们需要运行一个程序,来实时感受一下JITWatch的魅力。

    看到左边最上角的sandbox了吗?点开它可以看到下面的sandbox页面:

    这一个页面会选择一个sadbox中的例子展示给你,大家注意下面的输出框的说明,它会显示你的Disassembler是否可用。如果想要安装disassembler,请参照我之前的文章。

    如果你对这个例子不满意,或者你想使用自己的代码,那也完全没有问题。点击config。

    这里你可以配置源代码的路径,可以选择VM的语言,还有各种VM的选项,下面的选项相信我在之前的文章中都已经介绍过了吧。

    如果还有不懂的小伙伴,微信我,私聊我,1对1现场教学。

    万事俱备,只欠东风,开始吧,我可是要成为Java王的男人!

    然后我们就进入了TirView界面,这里我们可看到主界面分成了三部分,源代码,ByteCode和Assembly。

    小师妹:真是热泪盈眶啊,终于不需要自己去添加那些XX参数了。面向界面编程,真好。

    上面还有几个按钮,这里简单介绍一下他们的功能,具体的界面这里就不截图了,因为实在是太多了…

    Chain会展示调用链。

    Journal就是之前使用LogCompilation产生的xml日志。

    LNT,全称是line number table。—目前我还不知道这个是做什么用的,有知道的朋友,请给我留言。

    然后就是Inlined into功能了,这个功能要详细讲一下,因为会影响到程序的执行效率。

    还记得之前举的inline的例子吗?

    int a = 1;
    int b = 2;
    int result = add(a, b);
    ...
    public int add(int x, int y) { return x + y; }
    int result = a + b; //内联替换
    

    上面的add方法可以简单的被替换成为内联表达式。

    JITWatch可以显示方法是否被inlined,并且显示出inlined的原因。

    点击BCI可以显示关联的inlined的代码。大家自行体会。

    现在再让我们回到可爱又有风格的主页面:

    左边是源代码,包含了JDK自己的代码,如果你想详细的分析JDK自己代码的优化,那么这是一个非常好的工具。

    右边显示的是被JIT编译的类和方法,并且展示了编译级别和编译的时间。

    右上角又有一排按钮,Config是用来配置运行的代码。

    TimeLine是以图形的形式展示JIT编译的时间轴。

    Histo是直方图展示的一些编译信息。

    TopList里面是编译中产生的一些对象的或者数据的排序。

    Cache是free code cache空间。

    NMethod是native方法。

    Threads是JIT编译的线程。

    TriView就是我们最开始展示的面板。

    最后我们重点讲一下Suggestion:

    Suggestion是对代码的一些优化建议。

    从上图我们可以看到在调用String的hashMap方法时候无法inlined,因为被调用的方法太大了,超出了最大inlining size。

    总结

    所以,我们通过JITWatch可以学到什么呢?最最重要的是我们可以通过JITWatch来分析JIT的运行原理和本质。然后inlined的方法不要太大了,否则影响执行效率。

    本文作者:flydean程序那些事

    本文链接:http://www.flydean.com/jvm-jit-jitwatch/

    本文来源:flydean的博客

    欢迎关注我的公众号:程序那些事,更多精彩等着您!

    展开全文
  • jvm虚拟机的jitwatch分析工具,windos可以用maven编译成功
  • jitwatch

    2021-12-05 12:52:34
  • JITWatch.zip

    2020-07-01 21:05:00
    包含windows上搭建JITWatcher的资源,基于OpenJDK8,报错hsdis,fx,jitwatch,jdk
  • windows安装使用JITWatch

    2019-08-02 09:18:57
    原来在idea用了JITWatch插件,但是效果不好,换成直接使用。需要先安装hsdis、然后从github拉JITWatch的代码,然后编译使用; 安装hsdis-amd64.dll,hsdis-amd64.dll下载地址,下载后放入如下目录F:\LAMP\Java\...
    1. 原来在idea用了JITWatch插件,但是效果不好,换成直接使用。需要先安装hsdis、然后从github拉JITWatch的代码,然后编译使用;

    2. 安装hsdis-amd64.dll,hsdis-amd64.dll下载地址,下载后放入如下目录F:\LAMP\Java\jdk1.8.0_45\jre\bin\server,和jvm.dll一起

    3. 拉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构建还是一直失败。

    1. 换成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;
        }
    }
    
    1. 上面已经通过maven构建好了JITWatch,打开launchUI.bat ,选择config,配置源码和class文件,然后点击"open log"选择上一步输出的live.log。点击start
      在这里插入图片描述
    2. 可以探索了:
      在这里插入图片描述
    展开全文
  • 字节码文件目录 问题 不显示源码 不显示源码问题主要因为源码路径配置不对,需要配置到源码的具体所在目录,jitwatch不会自动递归目录查找源码 不显示汇编代码 全部显示没有汇编代码,或者部分显示有汇编代码,部分...

    当前环境:jdk1.8,win10,64位

    打印Java汇编指令

    使用hsdis工具打印汇编指令,可以自行编译或者下载已编译好的dll或so文件,并将文件拷贝至jdk安装目录下的bin/server或者bin/client,例如:D:\Program Files\Java\jdk1.8.0_131\bin\server\hsdis-amd64.dll
    或执行:export LD_LIBRARY_PATH=/hsdis路径
    windows下编译教程:https://dropzone.nfshost.com/hsdis/
    mac: https://kenai.com/projects/base-hsdis/downloads/directory/gnu-versions,或:https://download.csdn.net/download/u010597819/15346516
    执行Java命令增加如下参数,参考:https://wiki.openjdk.java.net/display/HotSpot/PrintAssembly
    或者可以将参数放在标志文件中并通过参数指定标志配置文件:-XX:Flags=myhotspotrc.txt

    -server 
    -XX:+UnlockDiagnosticVMOptions // 由于下面的参数属于诊断参数,所以在使用之前需要打开UnlockDiagnosticVMOptions参数
    -XX:+TraceClassLoading 
    -XX:+PrintAssembly // 为字节码与本地方法打印汇编代码print assembly code for bytecoded and native methods
    -XX:+LogCompilation 
    -XX:+DebugNonSafepoints (日志非常多,可以选择不加该参数)
    -XX:LogFile=VisibilityWithoutVolatile.log // 指定日志文件
    -Xcomp // JVM在第一次执行时便会把所有的字节码编译成本地代码
    -XX:CompileCommand=compileonly,*VisibilityWithoutVolatile.* 仅编译指定类的某个方法,星号代表所有方法(会丢失很多内容,不要为了减少日志而增加该参数,因小失大-_-!!!)
    // 不需要加该参数:-XX:CompileCommand=dontinline,*VisibilityWithoutVolatile.* 内联问题,可以指定不对某些方法进行jit编译,跳过有问题方法的编译 // Allow use of -XX:CompileCommand=dontinline to exclude problematic methods
    

    使用jitwatch分析日志

    使用方法参考:https://github.com/AdoptOpenJDK/jitwatch
    博主是通过mvn引入pom依赖,然后直接执行jitwatch的main方法开始使用。源码地址:https://github.com/GallantKong/jitwatch-example

    import org.adoptopenjdk.jitwatch.launch.LaunchUI;
    
    /**
     * @author 会灰翔的灰机
     * @date 2019/10/30
     */
    public class JITWatchMain {
    
        public static void main(String[] args) {
            LaunchUI.main(args);
        }
    }
    
    --pom.xml
    
    <dependency>
      <groupId>com.chrisnewland</groupId>
      <artifactId>jitwatch-parent</artifactId>
      <version>1.1.5</version>
      <type>pom</type>
    </dependency>
    <dependency>
      <groupId>com.chrisnewland</groupId>
      <artifactId>jitwatch</artifactId>
      <version>1.1.5</version>
    </dependency>
    <dependency>
      <groupId>com.chrisnewland</groupId>
      <artifactId>jitwatch-ui</artifactId>
      <version>1.1.5</version>
    </dependency>
    

    配置jitwatch

    源码文件目录
    字节码文件目录
    在这里插入图片描述

    问题

    不显示源码

    不显示源码问题主要因为源码路径配置不对,需要配置到源码的具体所在目录,jitwatch不会自动递归目录查找源码

    不显示汇编代码

    全部显示没有汇编代码,或者部分显示有汇编代码,部分没有。案例如图:显示不是JIT编译代码
    在这里插入图片描述

    1. jvm在方法执行达到一定的热度才会将代码编译成特定平台的汇编语言执行,使用-Xcomp参数指定jvm在第一次执行时把所有的字节码编译成本地代码
    2. 大型方法会在执行到限制时才会执行编译。所以平时不建议大家方法写的过大跟该参数的默认启用有些关系
    -XX:+DontCompileHugeMethods // 打开不编译巨大的方法,直至达到限制
    -XX:HugeMethodLimit=8000 // HotSpot VM默认不会JIT编译字节码大小超过8000字节的方法
    

    方法汇编代码显示级别不同

    1. 如下图:run方法显示级别为#3(C2/OSR/level4);main方法提示级别为#2(C2/level4)
      在这里插入图片描述
      在这里插入图片描述
    展开全文
  • 3.下载jitwatch工具 链接: jitwatch. 下载完成之后进行编译,可以使用下面三种方式编译: ant编译,请使用ant clean compile run gradle编译构建,请使用gradlew clean build run maven构建,请使用mvn c
  • jitwatch 这个工具,从名字上也能看出 jit 编译器监视的意思。 我很感谢自己的好奇心,让我曾坚定的自学了一年的汇编语言。 由于我是专科,学校并不开设汇编语言这门课,而我的第一门编程语言也是 c ,在学完 c 之后...
  • OpenJDK 9修补程序,将附加的VM遥测添加到hotspot.log中,以使用JITWatch进行分析。 最初针对Debian Linux x86_64 想法: 转义分析 在编译时打印理想图形 锁定省略 消除分配 代码缓存碎片可视化器 说明(第一次...
  • 网上已经有了详细的hsdis和jitwatch的教材,比如这篇利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的汇编代码hsdis能够查看Java生成的汇编代码,具体的可以查看上面这篇文章。这里提供一下Mac下的hsdis-amd...
  • JITWatch工具

    2019-02-21 15:55:00
    JITWatch,执行程序时监测Java HotSpot JIT编译器如何运作的工具,有助于做JVM的性能优化 wiki:https://github.com/AdoptOpenJDK/jitwatch/wiki SRC:https://github.com/AdoptOpenJDK/jitwatch 转载于:...
  • 2. JITWatch 下载启动 git clone https://github.com/AdoptOpenJDK/jitwatch cd jitwatch ./launchUI.sh 选择 open log,点击 start   图片.png 点击 sanbox ,选择open,选择要...
  • JITWatch是一个查看JIT行为的可视化工具。 使用 安装和启动JitWatch git clone https://github.com/AdoptOpenJDK/jitwatch cd jitwatch ./gradlew run 给JDK添加Hsdis 参考我的Github上的说明 hsdis ...
  • 这里推荐使用的是JITWatch这个工具。 首先需要从jithub上拉取项目的源代码并解压,然后在源代码所在的目录执行官方给的Maven,Gradel等不同环境下编译的指令。执行效果如下图: 整个编译过程很快,编译完成后会直接弹...
  • jitwatch可以看到哪些方法被JIT编译了 在调用一个方法后,会设置OopMap状态,这是一个safepoint 在方法返回前,会插入safepoint polling page的代码 test %eax, 0xxxxxxx,以便让线程进入到这个safepoint的时候...
  • 如下: java version "1.8.0_192" Java(TM) SE Runtime Environment (build 1.8.0_192-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode) 下面来安装HSDIS与JITWatch 1、HSDIS 从如下地址下载...
  • 本文我们就来介绍两个很好用的工具——HSDIS、JITWatch HSDIS HSDIS(HotSpot disassembler),一个Sun官方推荐的HotSpot虚拟机JIT编译代码的反汇编插件,其实际上就是一个动态库。这里我们直接从网上下载与我们系统...
  • 用这个命令启动: java -cp /usr/lib/jvm/java-7-oracle/lib/tools.jar:/usr/lib/jvm/java-7-oracle/jre/lib/jfxrt.jar:jitwatch-1.0.0-SNAPSHOT.jar:slf4j-api-1.7.7.jar:hamcrest-core-1.3.jar:logback-classic-...
  • 原文链接: ... 1. 安装hsids 这一步比较麻烦,需要提前安装...总之,hsdis+jitwatch用起来还是比较方便的(虽然安装起来确实比较费劲),推荐使用 转载于:https://www.cnblogs.com/stevenczp/p/7975776.html
  • 1.下载Apache Maven 3.5.3 ...   apache-maven-3.5.3-bin.zip  解压为C:\maven3 ... 在系统环境变量加入PATH后加入maven3的bin目录C:\maven3\bin ... C:\jitwatch>mvn clean compile exec:java  
  •  二: JITWatch 1.下载 启动 git clone https://github.com/AdoptOpenJDK/jitwatch cd jitwatch ./launchUI.sh  2.选择 open log,点击 start  3.点击 sanbox ,选择open,选择要分析的 java ...
  • JIT 编译器会优化热点代码,为了分析需要查看其反汇编指令。 安装hsdis Hotspotdisassembler,其实就是一个动态库,csdn上就有下载,下载后放在 $JAVA_HOME/jre/lib 目录下。 ...安装JITWatch...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 299
精华内容 119
关键字:

JITWatch

友情链接: ue_chinese.zip