A curated list of awesome JVM low level and performance related stuff.
Tools for bytecode manipulation and analysis.
- asmtools - Used to develop tools for the production of Java .class files.
- Byte Buddy - Code generation library creating Java classes at runtime without the help of a compiler.
- Jitescript - Bytecode generation library similar to BiteScript.
Garbage collectors for the JVM.
- Azul Pauseless Garbage Collection - Providing continuous, pauseless operation for Java applications.
- G1 - The Garbage-First Garbage Collector.
- Shenandoah - Ultra-Low-Pause-Time Garbage Collector.
Tools that generate load and measure the system accurately without coordinated omission
- Gatling - Asynchronous non-blocking scenario driven load testing tool for testing HTTP servers.
- wrk2 - A constant throughput, correct latency recording variant of wrk.
Languages running on the JVM.
- Ceylon - Object-oriented, strong and static programming language with an emphasis on immutability, created by Red Hat.
- Clojure - Dialect of Lisp created by Rich Hickey. Dynamically typed with emphasis on functional programming.
- Erjang - A JVM-based Erlang VM.
- Frege - Pure functional programming language in the spirit of Haskell.
- Golo - A simple dynamic language that makes extensive usage of
invokedynamic
. - Groovy - Optionally typed and dynamic language, with static-typing and static compilation capabilities.
- Java - General-purpose, concurrent, strongly typed, class-based object-oriented language.
- JRuby - Implementation of the Ruby language on the JVM.
- Jython - Python for the Java Platform.
- Kawa - Extension of the Scheme language, which is in the Lisp family of programming languages.
- Kotlin - Statically typed programming language for the JVM, Android and the browser.
- Nashorn - Lightweight high-performance JavaScript runtime in Java with a native JVM.
- Nodyn - Node.js compatible framework, running on the JVM powered by the DynJS Javascript runtime.
- OCaml-Java - Supports OCaml language v4. Generates plain Java bytecode and have seamless integration with Java.
- Renjin - JVM-based interpreter for the R language for the statistical analysis
- Scala - Strong and static programming language that combine object-oriented and functional programming ideas.
Tools and data structures for efficient memory layout and concurrent access.
- Agrona - Library of data structures and utility methods that are a common need when building high-performance applications.
- caffeine - A high performance caching library for Java 8.
- Chronicle-Bytes - Low level memory access wrappers.
- clj-ds - Clojure's data structures modified for use outside of Clojure.
- java-concurrent-hash-trie-map - Java port of a concurrent trie hash map implementation from Scala collections.
- fasttuple - Collections that are laid out adjacently in both on- and off-heap memory.
- gs-collections - Goldman Sachs collections framework.
- high-scale-lib - Cliff Click's High Scale Library.
- hppc - High Performance Primitive Collections.
- JCTools - Concurrent data structures currently missing from the JDK.
- Koloboke - Java Collections til the last breadcrumb of memory and performance.
- lightweight_trie - A very memory-efficient trie (radix tree) implementation.
- low-gc-membuffers - In-memory circular buffers that use direct ByteBuffers to minimize GC overhead.
- netty-buffers - Memory buffer pool implementation similar to jemalloc.
- ObjectLayout - A layout-optimized Java data structure package.
- ohc - Java large off heap cache.
- okio - Modern Java IO library that do clever things to save CPU and memory.
- PauselessHashMap - A java.util.HashMap compatible map that won't stall puts or gets when resizing.
- pcollections - A Persistent Java Collections Library.
- Quasar - Lightweight threads and actors for the JVM.
- RxJava - Library for composing asynchronous and event-based programs using observable sequences.
- stormpot - A fast object pool for the JVM.
- SmoothieMap - java.util.Map impl with worst put latencies more than 100 times smaller than java.util.HashMap.
- transducers-java - Composable algorithmic transformations independent from the context of their input and output sources.
Parsers, interpreters, compilers and source generation targeted for the JVM.
- Antlr - Parser generator for reading, processing, executing, or translating structured text or binary files.
- Apache Calcite - Dynamic data management framework and SQL parser plugin.
- compile-testing - Testing tools for javac and annotation processors.
- error-prone - Catch common Java mistakes as compile-time errors.
- Graal - New experimental just-in-time compiler for Java that is integrated with the HotSpot virtual machine.
- javacc - Parser generator for use with Java.
- javaparser - Java 1.8 Parser and Abstract Syntax Tree for Java.
- JavaPoet - A Java API for generating .java source files.
- jparsec - Builds mini parsers in pure Java a la Haskell Parsec.
- MPS - Design and build extensible DSLs and editors.
- parboiled - Parsing of arbitrary input text based on parsing expression grammars.
- Xtext - Framework for development of programming languages and DSLs.
Interconnecting JVM and native code
- j2v8 - Java API for Google's V8 JavaScript engine.
- jnr-ffi - Load native libraries without writing JNI code by hand.
- jssembly - Execution of native assembly from Java.
- Project Panama - Enriching the connections between the JVM and APIs used by C programmers.
Tools for network packet capture, monitoring, testing and resiliency.
- comcast - Simulating shitty network connections.
- gor - HTTP traffic replay in real-time.
- jRT - Measures response time of a java application to socket-based requests.
- K3PO - Create arbitrary network traffic and behavior to certify whether a network endpoint behaves correctly.
- muxy - Simulating real-world distributed system failures.
- SimianArmy - Resiliency tool that helps ensure that your applications can tolerate random instance failures.
- pcap4j - Java library for capturing, crafting, and sending packets using libpcap.
- pig - A Linux packet crafting tool.
- tcpdump - Packet analyzer for network traffic capture.
- tcpflow - Captures TCP connections flows in a way that is convenient for protocol analysis and debugging.
- tcpreplay - Pcap editing and replay tools.
*Useful nix tools when profiling the JVM and interaction with the host environment
- atoptool - Logging of system and process activity for long-term analysis, highlighting overloaded system.
- Flame Graphs - Visualization of profiled software, allowing the most frequent code-paths to be identified quickly and accurately.
- javap - Disassembles class files into code that reflects the java bytecode.
- jhat - Java Heap Analysis Tool
- jinfo - Prints configuration information for a given process.
- jstack - Prints stack traces of threads for a given Java process.
- jstat - Monitors GC and compiler statistics in the JVM.
- hwloc - Reports the structure of the processor, number of cores, hyperthreads and cache size.
- likwid - Read hardware performance counters on Intel and AMD processors.
- numactl - Control NUMA policy for processes or shared memory.
- oprofile - System-wide hardware performance monitoring with easy-to-use interface at low overhead.
- perf - Linux profiling with performance counters.
- perf-tools - Performance analysis tools based on Linux perf_events (aka perf) and ftrace.
- sysstat - Performance monitoring tools for Linux.
- taskset - Retrieve or set a processes’s CPU affinity.
Tools that provide profiling and tracing information to aid program optimization
- allocation-instrumenter - Java agent that rewrites bytecode to instrument allocation sites.
- aprof - Java memory allocation profiler.
- BTrace - a safe, dynamic tracing tool for the Java platform.
- Chronon - Record your entire java program. Replay on any machine.
- GCViewer - GCViewer is a tool that visualizes verbose GC output.
- hawkshaw - Tools for tracking down memory / JVM problems & generating predictable-as-possible VM behaviour.
- HdrHistogram - A Histogram that supports recording and analyzing sampled data value counts.
- hdrhistogram-metrics-reservoir - A Metrics Reservoir implementation backed by HdrHistogram.
- heapster - Production heap profiling for the JVM.
- honest-profiler - Sampling JVM profiler without the safepoint sample bias.
- jamm - Measure actual object memory use including JVM overhead.
- Java Mission Control - Continuously collect low level and detailed runtime information enabling after-the-fact incident analysis.
- java-sizeof - Memory consumption estimator for Java.
- jitwatch - Log analyser / visualiser for Java HotSpot JIT compiler.
- jHiccup - jHiccup is an open source tool designed to measure the pauses and stalls associated with an application’s underlying Java runtime platform.
- jmh - Micro benchmarks written in Java and other languages targetting the JVM.
- JOL - Analyze actual object layout schemes, footprint, and references in JVMs.
- JProfiler - Helps resolve performance bottlenecks, pin down memory leaks and understand threading issues.
- JVMTI - Provide a native API to inspect the state and to control the execution of applications running in the JVM.
- jvmtop - Lightweight console application to monitor running jvms on a machine in top-like manner.
- MAT - Java heap analyzer that help find memory leaks and reduce memory consumption.
- leakcanary - A memory leak detection library for Android and Java.
- metrics - Measure the behavior of critical components in production environment.
- Overseer - Low-Level Hardware Monitoring and Management for Java.
- perf-map-agent - Generate method mappings to use with the linux
perf
tool. - perfj - Linux perf for java programs.
- polarbear - A tool to help diagnose OutOfMemoryError conditions.
- Riemann JVM Profiler - JVM agent which sends function-level profiler telemetry to a Riemann server for analysis, visualization, and storage.
- statsd-jvm-profiler - JVM agent profiler that sends profiling data to StatsD.
- Swiss Java Knife - Small set of tools for JVM troublshooting, monitoring and profiling.
- Takipi - Tells you when and why code breaks in production.
- YourKit - Fully featured, easy to use, low overhead profiler.
- Zipkin - A distributed tracing system gather timing data for disparate services developed by Twitter.
Tools for managing jvm runtime processes
- CRaSH - The shell for the Java Platform.
- Drip - Fast JVM launching without the hassle of persistent JVMs.
- HotswapAgent - Redefine classes at runtime and skip the redeploy process.
- jvmkill - Agent that forcibly terminates the JVM when it is unable to allocate memory or create a thread.
- Nailgun - Nailgun is a client, protocol, and server for running Java programs from the command line without incurring the JVM startup overhead.
Virtual machines that implement the JVM specification or parts of it.
- Dalvik - Android runtime (ART) is the managed runtime used by applications and some system services on Android.
- DCEVM - Modification of Java HotSwap VM with unlimited support for reloading classes at runtime.
- HotSpot - HotSpot virtual machine maintained and distributed by Oracle Corporation.
- IBM J9 - JVM developed by IBM.
- jvm.go - A JVM written in Go.
- RoboVM - Create native iOS and Android apps in Java.
- Zing - The only JVM that eliminates Java garbage collection pauses for large heap sizes.
- Zulu - The only certified multi-platform build of OpenJDK: Free, 100% open source Java.
Documentation related to JVM
- Coordinated Omission problem - Discussion on Mechanical Sympathy.
- False sharing - Threads impact the performance of each other while modifying independent variables sharing the same cache line. Martin Thompson.
- The JVM specification - The Java Virtual Machine Specification Java SE 8 Edition.
- The Java Memory Model - Starting point for discussions of and information concerning the Java Memory Model.
- The JSR-133 Cookbook for Compiler Writers - Unofficial guide to implementing the new Java Memory Model (JMM) specified by JSR-133.
- Garbage Collection Tuning Guide - HotSpot Virtual Machine Garbage Collection Tuning Guide.
- Safepoints - Where is my safepoint? Nitsan Wakart.
Active discussions.
- concurrency-interest - Discussion list for JSR-166.
- hotspot-compiler-dev - Technical discussion about the development of the HotSpot bytecode compilers.
- hotspot-dev - HotSpot development mailing list.
- hotspot-gc-dev - Technical discussion about the development of the HotSpot garbage collectors.
- mechanical-sympathy - Discussing how to code sympathetically to and measure the underlying stack/platform so good performance can be extracted.
- Virtual Machine Meetup - Venue for discussing the latest research and developments in the area of managed language execution.
Videos, podcasts and other media related to JVMs
- The Illusion of Execution - Nitsan Wakart.
- Mythbusting Modern Hardware to Gain 'Mechanical Sympathy' - Martin Thompson.
- Designing for Performance - Martin Thompson.
- How NOT to Measure Latency - Gil Tene.
- JVM Language Summit 2015 - JVM Language Summit 2015.
- Bits of advice for VM writers - Cliff Click.
- Understanding Java garbage collection ... - Gil Tene.
- Faster Object Arrays - Gil Tene at GOTO Conferences.
- Java Memory Model Pragmatics - Aleksey Shipilev.
People related to JVM development
- Aleksey Shipilëv - Developing Oracle/Open JDK/Hotspot and other Java-related technologies.
- Brian Goetz - Java Language Architect at Oracle.
- Cliff Click - Creator of the HotSpot Server Compiler.
- Dave Dice - Senior research scientist in the Scalable Synchronization Research Group within Oracle.
- Doug Lea - Author of the Java memory model.
- Gil Tene - Azul Systems.
- John Rose - HotSpot developer.
- Martin Thompson - Pasty faced performance gangster.
- Nitsan Wakart - Azul Systems.
Contributions are very welcome!
Please have a look at contributing.md for guidelines.