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

Overview

JVM Explorer

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

JVM Explorer Screenshot

Build

Features

  • Browse local JVMs
  • View all classes inside each JVM
  • Search to find specific classes (supports regex)
  • View classloader hierarchy
  • View decompiled bytecode
  • View disassembled bytecode
  • Export loaded classes to a JAR file
  • Browse the state of all static variables in a class (and their nested fields)
  • Modify the state of static variables (and their nested fields)
  • Replace class file definitions
  • View system properties of running JVMs
  • Run JAR files with a patched ProcessBuilder to remove any -XX:+DisableAttachMechanism argument

Getting Started

There are two ways to run the application. Execute a provided JAR file or build and run it yourself. This application is intended to run on Java 11+ and can attach to JVMs running Java 7+.

Run JAR:

  1. Download the jvm-explorer JAR file from the latest release
  2. Run with at least Java 11

Build and run:

  1. Clone with Git

git clone https://github.com/Naton1/jvm-explorer.git

  1. Change into the project directory

cd jvm-explorer

  1. Run with Gradle

./gradlew run

Troubleshooting

Two logs files application.log and agent.log are created at [User Home]/jvm-explorer/logs

  • Must run the JAR with a Java version of at least Java 11
  • Must attach to a JVM running a Java version of at least Java 7
  • Must attach to a JVM running the same architecture - a 32-bit JVM must attach to a 32-bit JVM
  • May have to attach to a JVM that was started by the same user
  • Must attach to a JVM that supports the Java Attach API
  • If you run an old version of this application and attach to a JVM, then update to a newer version and try to re-attach, the agent will be outdated. If there were changes to the client-server protocol, the agent will fail. Restart the target JVM to fix this.

Note: this uses the Java Attach API, so any limitations that come with that will apply here.

Project Principles

  • Maintain a simple and easy-to-use interface
  • Take advantage of attaching to running JVMs - this is not a traditional GUI decompiler

Possible Enhancements

  • Plugins/scripting
  • Multiple decompilers
  • Inserting code (compile java code)
  • Editing bytecode
  • Execute code in attached JVM via JShell
  • Tabs/open multiple classes
  • Search code
  • Detect changes between current classes and previous classes
  • Internationalization

License

MIT License

You might also like...

chardetng for the JVM

chardetng_j This is chardetng compiled for the JVM using asmble. Licensing Please see the file named COPYRIGHT. TL;DR: Apache-2.0 OR MIT Disclaimer Th

Oct 18, 2021

An application metrics facade for the most popular monitoring tools. Think SLF4J, but for metrics.

Micrometer Application Metrics An application metrics facade for the most popular monitoring tools. Instrument your code with dimensional metrics with

Dec 30, 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

Oct 2, 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;

Dec 19, 2022

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

Dec 15, 2022

Sampling CPU and HEAP profiler for Java featuring AsyncGetCallTrace + perf_events

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

Jan 3, 2023

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

Jan 9, 2023

Fork of tagtraum industries' GCViewer. Tagtraum stopped development in 2008, I aim to improve support for Sun's / Oracle's java 1.6+ garbage collector logs (including G1 collector)

GCViewer 1.36 GCViewer is a little tool that visualizes verbose GC output generated by Sun / Oracle, IBM, HP and BEA Java Virtual Machines. It is free

Jan 4, 2023

Java Agent for Memory Measurements

Overview Jamm provides MemoryMeter, a Java agent for all Java versions to measure actual object memory use including JVM overhead. Use To use MemoryMe

Dec 28, 2022
Releases(v1.0.1)
Owner
null
Tools for tracking down memory / JVM problems & generating predictable-as-possible VM behaviour

Hawkshaw Tools for tracking down memory / JVM problems & generating predictable-as-possible VM behaviour You can Use Hawkshaw to mimic application obj

Martijn Verburg 40 Jan 9, 2021
production heap profiling for the JVM. compatible with google-perftools.

Heapster Heapster provides an agent library to do heap profiling for JVM processes with output compatible with Google perftools. The goal of Heapster

marius a. eriksen 392 Dec 27, 2022
JVM Profiler Sending Metrics to Kafka, Console Output or Custom Reporter

Uber JVM Profiler Uber JVM Profiler provides a Java Agent to collect various metrics and stacktraces for Hadoop/Spark JVM processes in a distributed w

Uber Common 1.7k Dec 22, 2022
Sends stacktrace-level performance data from a JVM process to Riemann.

Riemann JVM Profiler riemann-jvm-profiler is a JVM agent that you can inject into any JVM process--one written in Clojure, Java, Scala, Groovy, etc.--

Riemann 288 Sep 21, 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
A driver to allow deep interaction with the JVM without any restrictions

ToolFactory JVM Driver A driver to allow deep interaction with the JVM without any restrictions. To include ToolFactory JVM Driver in your projects si

ToolFactory 34 Oct 8, 2022
Jazzer is a coverage-guided, in-process fuzzer for the JVM platform developed by Code Intelligence

Jazzer is a coverage-guided, in-process fuzzer for the JVM platform developed by Code Intelligence. It is based on libFuzzer and brings many of its instrumentation-powered mutation features to the JVM.

Code Intelligence 696 Jan 5, 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