Log analyser / visualiser for Java HotSpot JIT compiler. Inspect inlining decisions, hot methods, bytecode, and assembly. View results in the JavaFX user interface.

Overview

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 wiki

https://github.com/AdoptOpenJDK/jitwatch/wiki

The JITWatch user interface is built using JavaFX. This is included in the Oracle JDK. If you are using a JDK that does not include JavaFX (e.g. Azul Zulu, or some flavour of packaged OpenJDK on Linux) then you can download a pre-built OpenJFX jar from https://chriswhocodes.com and put it in your build classpath.

ant

ant clean compile test run

maven

mvn clean compile test exec:java

gradle

gradlew clean build run

Build an example HotSpot log

# Build the code first with ant / maven / IDE
./makeDemoLogFile.sh
Comments
  • Investigate supporting IBM J9 Testarossa JIT

    Investigate supporting IBM J9 Testarossa JIT

    IBM J9 VM is going open-source :)

    ref: http://www.slideshare.net/MarkStoodley/under-the-hood-of-the-testarossa-jit-compiler ref: https://twitter.com/mstoodle

    It can output JIT decisions using -Xjit:verbose,vlog=<file name>

    Investigate if Testarossa has relatable concepts and look into writing a parser for its log and support this VM/JIT in JITWatch.

    enhancement 
    opened by chriswhocodes 19
  • Missing assembly view

    Missing assembly view

    Hi @chriswhocodes - (thanks for developing this wonderful tool).

    Setup : Ubuntu 16.04 with Oracle JDK 1.8.151

    I am running the code on a server machine and using my local client machine to analyze the JIT log. Both the server and the client machine have identical OSes and JVM versions. The sever has hsdis, and the assembly is generated in the log. However, it is not shown (on the client machine) in the TriView plane.

    When I click on the compiled method, I see this pop up on the console

    17:19:35.598 [JavaFX Application Thread] WARN  o.a.j.c.CompilationUtil - No Task found in Compilation 1451
    17:19:35.599 [JavaFX Application Thread] WARN  o.a.j.c.CompilationUtil - No Task found in Compilation 1451
    

    image

    opened by animeshtrivedi 17
  • Digest JMH/perfasm-annotated hotspot.log

    Digest JMH/perfasm-annotated hotspot.log

    JMH had recently added the Linux perf + PrintAssembly internal profiler, and we also switched to optionally dumping the perf-annotated hotspot.log. It would be nice if JITWatch can digest it. It does not right now, since it trips over the leading whitespace from the perf annotations.

    Steps to produce the sample HS log:

     $ hg clone http://hg.openjdk.java.net/code-tools/jmh/ jmh
     $ mvn clean install -DskipTests
     $ java -Djmh.perfasm.saveLog=true -jar jmh-samples/target/benchmarks.jar ".*DeadCode.*" -wi 3 -i 3 -r 1 -f 1 -prof perfasm 
     $ vi ./org.openjdk.jmh.samples.JMHSample_08_DeadCode.measureRight-AverageTime.log
    
    opened by shipilev 16
  • Some Numberformat exceptions and a NPE

    Some Numberformat exceptions and a NPE

    Learned already a lot from jitwatch - thanks :)

    Some exceptions where thrown today for master (1.0.0-SNAPSHOT) and java 1.8.0_45:

    • the first ones are probably due to my German environment:
    23:39:21.116 [Thread-7] ERROR o.a.j.s.AttributeSuggestionWalker - Couldn't parse branch tag attribute 1,21666e+06
    java.lang.NumberFormatException: For input string: "1,21666e+06"
            at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) ~[na:1.8.0_45]
            at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) ~[na:1.8.0_45]
            at java.lang.Double.parseDouble(Double.java:538) ~[na:1.8.0_45]
            at java.lang.Double.valueOf(Double.java:502) ~[na:1.8.0_45]
            at org.adoptopenjdk.jitwatch.suggestion.AttributeSuggestionWalker.handleBranchTag(AttributeSuggestionWalker.java:301) [jitwatch-1.0.0-SNAPSHOT.jar:na]
            at org.adoptopenjdk.jitwatch.suggestion.AttributeSuggestionWalker.processParseTag(AttributeSuggestionWalker.java:193) [jitwatch-1.0.0-SNAPSHOT.jar:na]
            at org.adoptopenjdk.jitwatch.suggestion.AttributeSuggestionWalker.processParseTag(AttributeSuggestionWalker.java:211) [jitwatch-1.0.0-SNAPSHOT.jar:na]
            at org.adoptopenjdk.jitwatch.suggestion.AttributeSuggestionWalker.processParseTag(AttributeSuggestionWalker.java:211) [jitwatch-1.0.0-SNAPSHOT.jar:na]
            at org.adoptopenjdk.jitwatch.suggestion.AttributeSuggestionWalker.visitTag(AttributeSuggestionWalker.java:367) [jitwatch-1.0.0-SNAPSHOT.jar:na]
            at org.adoptopenjdk.jitwatch.journal.JournalUtil.visitParseTagsOfLastTask(JournalUtil.java:91) [jitwatch-1.0.0-SNAPSHOT.jar:na]
    
    
    23:39:21.114 [Thread-7] ERROR o.a.j.s.AttributeSuggestionWalker - Unrecognised branch probability: 0,50343
    java.lang.NumberFormatException: For input string: "0,50343"
            at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) ~[na:1.8.0_45]
            at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) ~[na:1.8.0_45]
            at java.lang.Double.parseDouble(Double.java:538) ~[na:1.8.0_45]
            at org.adoptopenjdk.jitwatch.suggestion.AttributeSuggestionWalker.handleBranchTag(AttributeSuggestionWalker.java:313) [jitwatch-1.0.0-SNAPSHOT.jar:na]
    
    
    • And a NPE:
    Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
            at org.adoptopenjdk.jitwatch.model.MetaClass.loadInnerClasses(MetaClass.java:135)
            at org.adoptopenjdk.jitwatch.model.MetaClass.getClassBytecode(MetaClass.java:112)
            at org.adoptopenjdk.jitwatch.ui.triview.TriView.loadBytecodeForCurrentMember(TriView.java:631)
            at org.adoptopenjdk.jitwatch.ui.triview.TriView.setMember(TriView.java:513)
            at org.adoptopenjdk.jitwatch.ui.triview.TriView.setMember(TriView.java:488)
            at org.adoptopenjdk.jitwatch.ui.JITWatchUI.openTriView(JITWatchUI.java:693)
            at org.adoptopenjdk.jitwatch.ui.suggestion.MemberTableCell$1.handle(MemberTableCell.java:63)
            at org.adoptopenjdk.jitwatch.ui.suggestion.MemberTableCell$1.handle(MemberTableCell.java:59)
            at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    
    
    opened by karussell 14
  • Can't display assembly of Graal log file

    Can't display assembly of Graal log file

    The attached log has been generated with Graal 0.27 from http://www.oracle.com/technetwork/oracle-labs/program-languages/downloads/index.html. I added hsdis from JDK 8. The VM options were

    -XX:+UnlockDiagnosticVMOptions
    -XX:+TraceClassLoading
    -XX:+LogCompilation
    -XX:+PrintAssembly
    -XX:LogFile=compilation8graal-0.5.1.txt
    

    If I click on com.github.marschall.charsequences.CharSequences#uuidFromCharSequence(CharSequence) I get

    Assembly not found. Was -XX:+PrintAssembly option used?
    

    The classes JAR can be found here https://search.maven.org/remotecontent?filepath=com/github/marschall/charsequences/0.5.1/charsequences-0.5.1-jar-with-test-dependencies.jar The source JAR can be found here https://search.maven.org/remotecontent?filepath=com/github/marschall/charsequences/0.5.1/charsequences-0.5.1-sources.jar

    This is the log compilation8graal-0.5.1.txt

    bug 
    opened by marschall 13
  • Can't see assembly nor bytecode

    Can't see assembly nor bytecode

    Hi! I'm unable to see the assembly nor the bytecode in the TriView. The sources are shown fine, so does the JIT journal.

    I'm using the VM flags recommended in the wiki:

    -XX:+UnlockDiagnosticVMOptions -XX:+TraceClassLoading -XX:+LogCompilation > -XX:+PrintAssembly

    This is the version of the JVM I'm using (with the HSDIS plugin).

    java version "1.8.0" Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

    My OS is Debian 8 (Jessie) x64.

    I'm using the Java 8 binary download of JitWatch (my application is targeting Java 8).

    The HotSpot log file does outputs the assembly, here is an example:

    0x00007fd3994a649d: mov $0x1,%r10d 0x00007fd3994a64a3: jmpq 0x00007fd3994a630c 0x00007fd3994a64a8: mov %rdx,%rdi ;*synchronization entry ; -com.carrotsearch.hppc.ObjectObjectOpenHashMap::forEach@-1 (line 822)

    opened by dustContributor 13
  • NPE on

    NPE on "Chain" button

    Any attempt to open "Chain" view for any method results in NPE.

    Checked current "master" branch and tag "1.4.7".

    JDK version: 11.0.13.8, 11.0.15.10

    java.lang.NullPointerException
        at org.adoptopenjdk.jitwatch.ui.compilechain.CompileChainStage.buildTree (CompileChainStage.java:375)
        at org.adoptopenjdk.jitwatch.ui.compilechain.CompileChainStage.compilationChanged (CompileChainStage.java:132)
        at org.adoptopenjdk.jitwatch.ui.main.JITWatchUI.openCompileChain (JITWatchUI.java:1271)
        at org.adoptopenjdk.jitwatch.ui.triview.TriView$1.handle (TriView.java:161)
        at org.adoptopenjdk.jitwatch.ui.triview.TriView$1.handle (TriView.java:155)
        at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent (CompositeEventHandler.java:86)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:234)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:191)
        at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent (CompositeEventDispatcher.java:59)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:58)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.EventUtil.fireEventImpl (EventUtil.java:74)
        at com.sun.javafx.event.EventUtil.fireEvent (EventUtil.java:49)
        at javafx.event.Event.fireEvent (Event.java:198)
        at javafx.scene.Node.fireEvent (Node.java:8792)
        at javafx.scene.control.Button.fire (Button.java:203)
        at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased (ButtonBehavior.java:208)
        at com.sun.javafx.scene.control.inputmap.InputMap.handle (InputMap.java:274)
        at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent (CompositeEventHandler.java:247)
        at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent (CompositeEventHandler.java:80)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:234)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:191)
        at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent (CompositeEventDispatcher.java:59)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:58)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.EventUtil.fireEventImpl (EventUtil.java:74)
        at com.sun.javafx.event.EventUtil.fireEvent (EventUtil.java:54)
        at javafx.event.Event.fireEvent (Event.java:198)
        at javafx.scene.Scene$MouseHandler.process (Scene.java:3897)
        at javafx.scene.Scene.processMouseEvent (Scene.java:1878)
        at javafx.scene.Scene$ScenePeerListener.mouseEvent (Scene.java:2623)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run (GlassViewEventHandler.java:411)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run (GlassViewEventHandler.java:301)
        at java.security.AccessController.doPrivileged (Native Method)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2 (GlassViewEventHandler.java:450)
        at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock (QuantumToolkit.java:424)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent (GlassViewEventHandler.java:449)
        at com.sun.glass.ui.View.handleMouseEvent (View.java:557)
        at com.sun.glass.ui.View.notifyMouse (View.java:943)
        at com.sun.glass.ui.win.WinApplication._runLoop (Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3 (WinApplication.java:184)
        at java.lang.Thread.run (Thread.java:829)
    
    bug 
    opened by alexei-osipov 11
  • NullPointerException when parsing log

    NullPointerException when parsing log

    Hi,

    Using the latest code of jitwatch - I have a NPE in ParseUtil.java because componentType is null: if (componentType.isAssignableFrom(sigParamClass))

    I added a simple if and it seems that memParamClass is "boolean".

    I'm running 1.8.0 192.

    Let me know if need something else.

    Thanks

    opened by punx120 10
  • MetaMember not found for X

    MetaMember not found for X

    I am getting hundreds of errors like MetaMember not found for org.mypkg.benchmark.Compilation2Benchmarks$ fib$1, corresponding to the classes that I specifically want to analyze. 😄 I believe I've set the sources and classes correctly in config. The class and method do exist:

    $ javap -p org.mypkg.benchmark.Compilation2Benchmarks$ | grep fib$1
      private static final int fib$1(int);
    

    Where should I go from here?

    opened by aryairani 10
  • Save UI state when refreshing

    Save UI state when refreshing

    When in a workflow of tweaking code, collecting hotspot logs, then analysing with JITWatch, the clicks to navigate back to the method of interest interrupt the flow.

    It would be great if the UI could at least restore the selection of the main tree view. It would be better yet to re-open the TriView panel (assuming the method still exists in the most recent run.)

    The other productivity improvement would be to allow command line options to trigger the "Start" with a particular hotspot.log and opening of a TriView at a given method.

    opened by retronym 9
  • Parse Errors on MetaMember

    Parse Errors on MetaMember

    The attached file was generated with JDK 11 and generated the following parse errors. Jitwatch is built from the current master branch:

    Could not parse line 33060 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 run ()V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 run ()V
    Could not parse line 33509 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 run ()V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 run ()V
    Could not parse line 34372 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 34373 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V
    Could not parse line 34376 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 34574 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 34575 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V
    Could not parse line 34577 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 run ()V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 run ()V
    Could not parse line 34580 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V
    Could not parse line 34746 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V
    Could not parse line 35161 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 35358 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 run ()V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 run ()V
    Could not parse line 41020 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 41022 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 41311 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 41313 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 48056 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 run ()V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 run ()V
    Could not parse line 48289 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 48344 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V
    Could not parse line 48399 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 &lt;init&gt; (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)V
    Could not parse line 48529 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 48587 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 run ()V : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 run ()V
    Could not parse line 51117 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$2.0x0000000100066840 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    Could not parse line 51176 : com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable; : MetaMember not found for com.github.marschall.memorymodeldemo.SynchronisedSum$$Lambda$3.0x0000000100066c40 get$Lambda (Lcom.github.marschall.memorymodeldemo.SynchronisedSum;)Ljava.lang.Runnable;
    
    

    hotspot_pid212229.log

    opened by marschall 8
  • java.lang.VerifyError: Cannot inherit from final class

    java.lang.VerifyError: Cannot inherit from final class

    Hi,

    While parsing a hotspot log (jitwatch is using zulu11.58.23-ca-jdk11.0.16.1-win_x64) jitwatch stopped with the following exception:

    Exception in thread "Thread-3" java.lang.VerifyError: Cannot inherit from final class at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:555) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:398) at org.adoptopenjdk.jitwatch.util.ClassUtil.loadClassWithoutInitialising(ClassUtil.java:55) at org.adoptopenjdk.jitwatch.util.ParseUtil.lateLoadMetaClass(ParseUtil.java:1115) at org.adoptopenjdk.jitwatch.model.JITDataModel.findMetaMember(JITDataModel.java:257) at org.adoptopenjdk.jitwatch.util.ParseUtil.findMemberWithSignature(ParseUtil.java:352) at org.adoptopenjdk.jitwatch.parser.AbstractLogParser.findMemberWithSignature(AbstractLogParser.java:250) at org.adoptopenjdk.jitwatch.parser.AbstractLogParser.handleMember(AbstractLogParser.java:576) at org.adoptopenjdk.jitwatch.parser.AbstractLogParser.handleMethodLine(AbstractLogParser.java:479) at org.adoptopenjdk.jitwatch.parser.AbstractLogParser.handleTagQueued(AbstractLogParser.java:373) at org.adoptopenjdk.jitwatch.parser.hotspot.HotSpotLogParser.handleTag(HotSpotLogParser.java:356) at org.adoptopenjdk.jitwatch.parser.hotspot.HotSpotLogParser.parseLogCompilationLines(HotSpotLogParser.java:154) at org.adoptopenjdk.jitwatch.parser.hotspot.HotSpotLogParser.parseLogFile(HotSpotLogParser.java:130) at org.adoptopenjdk.jitwatch.parser.AbstractLogParser.processLogFile(AbstractLogParser.java:366) at org.adoptopenjdk.jitwatch.parser.ILogParser.processLogFile(ILogParser.java:23) at org.adoptopenjdk.jitwatch.ui.main.JITWatchUI$1.run(JITWatchUI.java:253) at java.base/java.lang.Thread.run(Thread.java:829)

    I can't figure out how to go past this.

    Thanks

    opened by horiavmuntean 2
  • NPE occured from Tag.getAttributes()

    NPE occured from Tag.getAttributes()

    I was exploring the default add sample in the JITWatch and suddenly this exception was shown.

    Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: Cannot invoke "org.adoptopenjdk.jitwatch.model.Tag.getAttributes()" because "<local8>" is null
            at org.adoptopenjdk.jitwatch.hotthrow.HotThrowFinder.visitTag(HotThrowFinder.java:119)
            at org.adoptopenjdk.jitwatch.hotthrow.HotThrowFinder.visitTag(HotThrowFinder.java:215)
            at org.adoptopenjdk.jitwatch.compilation.CompilationUtil.visitParseTagsOfCompilation(CompilationUtil.java:89)
            at org.adoptopenjdk.jitwatch.hotthrow.HotThrowFinder.findHotThrows(HotThrowFinder.java:94)
            at org.adoptopenjdk.jitwatch.toplist.HotThrowTopListVisitable.visit(HotThrowTopListVisitable.java:34)
            at org.adoptopenjdk.jitwatch.treevisitor.TreeVisitor.walkPackage(TreeVisitor.java:48)
            at org.adoptopenjdk.jitwatch.treevisitor.TreeVisitor.walkPackage(TreeVisitor.java:39)
            at org.adoptopenjdk.jitwatch.treevisitor.TreeVisitor.walkPackage(TreeVisitor.java:39)
            at org.adoptopenjdk.jitwatch.treevisitor.TreeVisitor.walkTree(TreeVisitor.java:29)
            at org.adoptopenjdk.jitwatch.toplist.AbstractTopListVisitable.buildTopList(AbstractTopListVisitable.java:58)
            at org.adoptopenjdk.jitwatch.ui.toplist.TopListStage.buildTableView(TopListStage.java:208)
            at org.adoptopenjdk.jitwatch.ui.toplist.TopListStage.access$100(TopListStage.java:48)
            at org.adoptopenjdk.jitwatch.ui.toplist.TopListStage$3.changed(TopListStage.java:151)
            at org.adoptopenjdk.jitwatch.ui.toplist.TopListStage$3.changed(TopListStage.java:146)
            at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:360)
            at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
            at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:106)
            at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
            at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
            at javafx.scene.control.ComboBoxBase.setValue(ComboBoxBase.java:151)
            at javafx.scene.control.ComboBox.updateValue(ComboBox.java:516)
            at javafx.scene.control.ComboBox$3.changed(ComboBox.java:499)
            at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:360)
            at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
            at javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:80)
            at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
            at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
            at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
            at javafx.scene.control.SelectionModel.setSelectedItem(SelectionModel.java:105)
            at javafx.scene.control.ComboBox$ComboBoxSelectionModel.lambda$new$0(ComboBox.java:556)
            at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:136)
            at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
            at javafx.beans.property.ReadOnlyIntegerPropertyBase.fireValueChangedEvent(ReadOnlyIntegerPropertyBase.java:78)
            at javafx.beans.property.ReadOnlyIntegerWrapper.fireValueChangedEvent(ReadOnlyIntegerWrapper.java:102)
            at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:114)
            at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:148)
            at javafx.scene.control.SelectionModel.setSelectedIndex(SelectionModel.java:69)
            at javafx.scene.control.SingleSelectionModel.updateSelectedIndex(SingleSelectionModel.java:215)
            at javafx.scene.control.SingleSelectionModel.select(SingleSelectionModel.java:149)
            at javafx.scene.control.skin.ComboBoxListViewSkin.lambda$createListView$10(ComboBoxListViewSkin.java:558)
            at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:348)
            at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
            at javafx.beans.property.ReadOnlyIntegerPropertyBase.fireValueChangedEvent(ReadOnlyIntegerPropertyBase.java:78)
            at javafx.beans.property.ReadOnlyIntegerWrapper.fireValueChangedEvent(ReadOnlyIntegerWrapper.java:102)
            at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:114)
            at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:148)
            at javafx.scene.control.SelectionModel.setSelectedIndex(SelectionModel.java:69)
            at javafx.scene.control.MultipleSelectionModelBase.select(MultipleSelectionModelBase.java:413)
            at javafx.scene.control.MultipleSelectionModelBase.clearAndSelect(MultipleSelectionModelBase.java:360)
            at javafx.scene.control.ListView$ListViewBitSetSelectionModel.clearAndSelect(ListView.java:1451)
            at com.sun.javafx.scene.control.behavior.CellBehaviorBase.simpleSelect(CellBehaviorBase.java:282)
            at com.sun.javafx.scene.control.behavior.CellBehaviorBase.doSelect(CellBehaviorBase.java:246)
            at com.sun.javafx.scene.control.behavior.CellBehaviorBase.mousePressed(CellBehaviorBase.java:176)
            at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
            at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
            at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
            at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
            at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
            at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
            at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
            at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
            at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
            at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
            at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
            at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
            at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
            at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
            at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
            at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
            at javafx.event.Event.fireEvent(Event.java:198)
            at javafx.scene.Scene$MouseHandler.process(Scene.java:3897)
            at javafx.scene.Scene.processMouseEvent(Scene.java:1878)
            at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2623)
            at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
            at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
            at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
            at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
            at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
            at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
            at com.sun.glass.ui.View.handleMouseEvent(View.java:557)
            at com.sun.glass.ui.View.notifyMouse(View.java:943)
            at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
            at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
            at java.base/java.lang.Thread.run(Thread.java:833)
    opened by firststar91 3
  • After the SpringBoot project adds source and class to the config, the following error occurs when you click start

    After the SpringBoot project adds source and class to the config, the following error occurs when you click start

    After the SpringBoot project adds source and class to the config, the following error occurs when you click start

    hello~, I want to use JitWatch to help me analyze which code in my SpringBoot project is too high because which code is compiled and analyzed by JIT, but after pouring into the source code and class directory of the project according to wiki, there is an exception shown below. I don't know how to solve it for the time being, or whether there is a problem with my way of use. Please give me some advice. Thank you very much.

    jitwatch.out

    19:01:21.127 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.StringUtils'
    19:01:21.128 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.StringUtils'
    19:01:21.129 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.StringUtils'
    19:01:21.129 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.StringUtils'
    19:01:21.148 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.ConcurrentReferenceHashMap$Segment'
    19:01:21.148 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.ConcurrentReferenceHashMap$Segment'
    19:01:21.152 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.Assert'
    19:01:21.152 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.Assert'
    19:01:21.153 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.ConcurrentReferenceHashMap$Segment'
    19:01:21.153 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.core.ResolvableType'
    19:01:21.153 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.ConcurrentReferenceHashMap$Segment'
    19:01:21.154 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.core.ResolvableType'
    19:01:21.160 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.ConcurrentReferenceHashMap'
    19:01:21.161 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.ConcurrentReferenceHashMap'
    19:01:21.161 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.core.ResolvableType'
    19:01:21.161 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.util.ObjectUtils'
    19:01:21.161 [Thread-4] ERROR o.a.j.u.ParseUtil - ClassNotFoundException: 'org.springframework.core.ResolvableType'
    ......
    

    jitwatch.out.log

    jitlog jitwatch01 jitwatch2
    opened by CodeHourra 5
  • Fix code cache visualisation since segmented code cache

    Fix code cache visualisation since segmented code cache

    The code cache view is less useful since JDK9 introduced the segmented code cache. The compiled methods are much harder to spot visually.

    Need to obtain the correct address ranges for the native, profiled, and non-profiled segments and when viewing a compiled method, only show the address range for the segment containing that method.

    bug 
    opened by chriswhocodes 0
Releases(1.4.7)
Owner
AdoptOpenJDK
The Community and code behind the Build Farm which produces high quality, FREE OpenJDK (Java) binaries.
AdoptOpenJDK
GUI for comparing JMH results

jmh-compare-gui GUI for comparing JMH results Requires Java 8. Usage Copy the output of JMH to the clipboard with the header Click paste Repeat with o

David Karnok 70 Sep 24, 2021
Kotlin-decompiled - (Almost) every single language construct of the Kotlin programming language compiled to JVM bytecode and then decompiled to Java again for better readability

Kotlin: Decompiled (Almost) every single language construct of the Kotlin programming language compiled to JVM bytecode and then decompiled to Java ag

The Self-Taught Software Engineer 27 Dec 14, 2022
A Java agent that rewrites bytecode to instrument allocation sites

The Allocation Instrumenter is a Java agent written using the java.lang.instrument API and ASM. Each allocation in your Java program is instrumented;

Google 438 Dec 19, 2022
Assembler/disassembler for java bytecode

Raung raung - yet another assembler/disassembler for java bytecode. Similar to Krakatau and Smali, based on ASM library. ❗ Warning: this project at a

null 20 Oct 2, 2022
One file java script for visualizing JDK flight recorder execution logs as flamegraphs without any dependencies except Java and a browser.

Flamegraph from JFR logs Simple one file Java script to generate flamegraphs from Java flight recordings without installing Perl and the Brendan Gregg

Billy Sjöberg 17 Oct 2, 2022
Sampling CPU and HEAP profiler for Java featuring AsyncGetCallTrace + perf_events

async-profiler This project is a low overhead sampling profiler for Java that does not suffer from Safepoint bias problem. It features HotSpot-specifi

null 5.8k Jan 3, 2023
Get Method Sampling from Java Flight Recorder Dump and convert to FlameGraph compatible format.

Note: Travis has removed the support for Oracle JDK 8. Therefore the build status is removed temporarily. Converting JFR Method Profiling Samples to F

M. Isuru Tharanga Chrishantha Perera 248 Dec 16, 2022
JVM Explorer is a Java desktop application for browsing loaded class files inside locally running Java Virtual Machines.

JVM Explorer JVM Explorer is a Java desktop application for browsing loaded class files inside locally running Java Virtual Machines. Features Browse

null 109 Nov 30, 2022
Simple JVM Profiler Using StatsD and Other Metrics Backends

statsd-jvm-profiler statsd-jvm-profiler is a JVM agent profiler that sends profiling data to StatsD. Inspired by riemann-jvm-profiler, it was primaril

Etsy, Inc. 330 Oct 30, 2022
Small set of tools for JVM troublshooting, monitoring and profiling.

Swiss Java Knife (SJK) SJK is a command line tool for JVM diagnostic, troubleshooting and profiling. SJK exploits standard diagnostic interfaces of JV

Alexey Ragozin 3.2k Jan 3, 2023
Best-of-breed OpenTracing utilities, instrumentations and extensions

OpenTracing Toolbox OpenTracing Toolbox is a collection of libraries that build on top of OpenTracing and provide extensions and plugins to existing i

Zalando SE 181 Oct 15, 2022
A short and practical intro into project loom

project-loom Project loom is all about making concurrency easier (for developers) on the JVM. It is in experimental phase. Download the early access b

Ashwin Bhaskar 16 Dec 15, 2021
Simple Anti-Dump to slow down and annoy attackers.

Anti-Dump A simple Anti-Dump to slow down and annoy attackers. Usage Copy the class into your mod or loader. Rename any instances of dummy/class/path

null 47 Dec 25, 2022
An OpenJDK release maintained and supported by SAP

SapMachine This project contains a downstream version of the OpenJDK project. It is used to build and maintain a SAP supported version of OpenJDK for

SAP 400 Jan 3, 2023
Dynamic loading and compiling project based on JVM

camphor 基于jvm的弹性加载及编译中间件(Elastic loading and compiling middleware based on JVM) camphor_0.0.1 项目简介 该项目定位为弹性中间件,能够使系统在不重启的情况下完成增量代码文件的动态编译和加载 模块介绍 camp

palading 1 Jan 22, 2022
JavaOTTF - Official OTTF parser and composer for JVM languages

JavaOTTF Official OTTF parser and composer for JVM languages. Documentation Please refer to the Wiki Section. Installation Maven Add repository into p

Open Timetable 2 Nov 21, 2022
A sidecar to run alongside Trino to gather metrics using the JMX connector and expose them in different formats using Apache velocity

Overview A sidecar to run alongside Trino to gather metrics using the JMX connector and expose them in different formats using Apache Velocity. Click

BlueCat Engineering 4 Nov 18, 2021
Java memory allocation profiler

Aprof - Java Memory Allocation Profiler What is it? The Aprof project is a Java Memory Allocation Profiler with very low performance impact on profile

Devexperts 211 Dec 15, 2022
BTrace - a safe, dynamic tracing tool for the Java platform

btrace A safe, dynamic tracing tool for the Java platform Version 2.1.0 Quick Summary BTrace is a safe, dynamic tracing tool for the Java platform. BT

btrace.io 5.3k Jan 9, 2023