Awesome JVM
A curated list of awesome JVM low level, performance and non-framework related stuff.
Bytecode
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
Garbage collectors for the JVM.
-
Azul Pauseless Garbage Collection - Providing continuous, pauseless operation for Java applications.
-
Balanced GC - GC policy available in the Java Virtual Machine for IBM WebSphere Application Server V8.
-
Epsilon GC - Completely passive GC implementation with bounded allocation limit, and lowest runtime performance overhead possible.
-
G1 - The Garbage-First Garbage Collector.
-
Shenandoah - Ultra-Low-Pause-Time Garbage Collector.
-
The Garbage Collection Handbook - Book that addresses new challenges to garbage collection made by recent advances in hardware and software.
-
ZGC - Garbage collector optimized for low latency and very large heaps.
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
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.
-
Eta - Pure, lazy, strongly typed functional programming language on the JVM.
-
Frege - Pure functional programming language in the spirit of Haskell.
-
gojava - Java bindings for Go packages.
-
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.
-
JPHP - PHP on the Java VM.
-
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.
-
LuaJ - Java-centric implementation of lua vm built to leverage standard Java features.
-
Nashorn - Lightweight high-performance JavaScript runtime in Java with a native JVM.
-
OCaml-Java - Supports OCaml language v4. Generates plain Java bytecode and have seamless integration with Java.
-
Rembulan - Rembulan is an implementation of Lua 5.3 for the JVM, written in pure Java with minimal dependencies.
-
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.
-
Xtend - Flexible and expressive dialect of Java, which compiles into Java 5 source code.
Machine Learning
-
Deeplearning4j - Open-Source, Distributed, Deep Learning Library for the JVM.
-
H2O - Fast statistical, machine learning & math runtime.
-
Smile - Statistical Machine Intelligence & Learning Engine.
Memory and concurrency
Tools and data structures for efficient memory layout and concurrent access.
-
Agera - Reactive Programming for Android by Google.
-
Agrona - Library of data structures and utility methods that are a common need when building high-performance applications.
-
Apache Arrow - A high-performance cross-system data layer for columnar in-memory analytics.
-
bloofi - Java implementation of multidimensional Bloom filters
-
Cap’n Proto - Insanely fast data interchange format and capability-based RPC system.
-
caffeine - A high performance caching library for Java 8.
-
Chronicle-Bytes - Low level memory access wrappers.
-
Chronicle-Queue - Micro second messaging that stores everything to disk.
-
Chronicle-Map - In-memory key-value store designed for low-latency and/or multi-process applications.
-
clj-ds - Clojure’s data structures modified for use outside of Clojure.
-
colfer - Binary serialization format and class generator.
-
commons-math - Library of lightweight, self-contained mathematics and statistics components.
-
CuckooFilter4J - Bloom filter replacement for approximated set-membership queries.
-
cyclops - Integration modules for RxJava, Reactor, FunctionalJava, Guava & Javaslang.
-
Eclipse Collections - Collections framework for Java.
-
externalsortinginjava - Sort very large files using multiple cores and an external-memory algorithm.
-
failsafe - A lightweight, zero-dependency library for handling failures.
-
fasttuple - Collections that are laid out adjacently in both on- and off-heap memory.
-
fast-uuid - Java library for quickly and efficiently parsing and writing UUIDs.
-
FlatBuffers - Efficient cross platform serialization library for C++, C#, Go, Java, JavaScript, PHP, and Python.
-
geohash - Java utility methods for geohashing.
-
gs-collections - Goldman Sachs collections framework.
-
hollow - Java library and comprehensive toolset for harnessing small to moderately sized in-memory datasets.
-
high-scale-lib - Cliff Click’s High Scale Library.
-
hppc - High Performance Primitive Collections.
-
injector - A new Executor for Java.
-
java-concurrent-hash-trie-map - Java port of a concurrent trie hash map implementation from Scala collections.
-
java-hll - Java library for the HyperLogLog algorithm.
-
JavaFastPFOR - Library to compress and uncompress arrays of integers very fast.
-
java-string-similarity - String similarity and distance measures, including Levenshtein edit distance and sibblings, Jaro-Winkler, Longest Common Subsequence, cosine similarity etc.
-
JCTools - Concurrent data structures currently missing from the JDK.
-
DSL-JSON - High performance JSON library with advanced compile-time databinding.
-
jsoniter - Claims to be the fastest JSON parser ever (copy of DSL-JSON).
-
jOOL - Useful extensions to Java 8 lambdas.
-
Koloboke - Java Collections til the last breadcrumb of memory and performance.
-
LevelDB - Rewrite (port) of LevelDB in Java.
-
lightweight_trie - A very memory-efficient trie (radix tree) implementation.
-
lmdbjni - Java API to LMDB (HawtJNI) which is an ultra-fast, ultra-compact key-value embedded data store written in C.
-
lmdbjava - Java API to LMDB (JNR) which is an ultra-fast, ultra-compact key-value embedded data store written in C.
-
low-gc-membuffers - In-memory circular buffers that use direct ByteBuffers to minimize GC overhead.
-
lwjgl3 - Java library that enables cross-platform access to popular native APIs useful in the development of graphics (OpenGL), audio (OpenAL) and parallel computing (OpenCL) applications.
-
MapDB - Collections backed by off-heap or on-disk storage.
-
mph-table - Minimal Perfect Hash Tables are an immutable key/value store with efficient space utilization and fast reads.
-
mug - A small, zero-dep functional util library originating from Google.
-
netty-buffers - Memory buffer pool implementation similar to jemalloc.
-
ObjectLayout - A layout-optimized Java data structure package.
-
ohc - Java large off heap cache developed for Apache Cassandra 3.0.
-
okio - Modern Java IO library that do clever things to save CPU and memory.
-
onyx-java - Mirrors the Onyx Platform core API by providing a Java equivalent for each component of an Onyx workflow.
-
parquet - Columnar storage format that uses the record shredding and assembly algorithm described in the Dremel paper.
-
PauselessHashMap - A java.util.HashMap compatible map that won’t stall puts or gets when resizing.
-
pcollections - A Persistent Java Collections Library.
-
protobuf - Google’s data interchange format.
-
Quasar - Lightweight threads and actors for the JVM.
-
rtree - Immutable in-memory R-tree and R*-tree implementations in Java with reactive api.
-
RTree2D - RTree2D is a 2D immutable R-tree with STR (Sort-Tile-Recursive) packing for ultra-fast nearest and intersection queries on plane and spherical surfaces.
-
Reactive Streams - Standard for asynchronous stream processing with non-blocking back pressure.
-
Reactive Streams Utilities - Future standard utilities library for Reactive Streams.
-
RoaringBitmap - A better compressed bitset in Java.
-
rollinghashjava - Rolling hash functions in Java.
-
Reactor - Reactive data applications on the JVM for Java, Groovy, Clojure and other.
-
RxJava - Library for composing asynchronous and event-based programs using observable sequences.
-
SmoothieMap - java.util.Map impl with worst put latencies more than 100 times smaller than java.util.HashMap.
-
Simple Binary Encoding - High Performance Message Codec.
-
splitmap - A parallel bitmap implementation.
-
DataSketches - A Java software library of stochastic streaming algorithms.
-
stormpot - A fast object pool for the JVM.
-
stream-lib - A Java library for summarizing data in streams for which it is infeasible to store all events.
-
streamvbyte - Fast integer compression in C using the StreamVByte codec.
-
TraneIO - High-performance implementation of the Future abstraction.
-
transducers-java - Composable algorithmic transformations independent from the context of their input and output sources.
-
VarInt - No-deps variable int implementation without deps (by Bazel).
-
vavr - Functional Library for Java 8+.
-
wire - Clean, lightweight protocol buffers for Android and Java.
-
Zero-Allocation-Hashing - Hashing any sequences of bytes in Java, including all kinds of primitive arrays, buffers, CharSequences and more.
Parsers, interpreters, compilers and source generation targeted for the JVM.
-
Antlr - Parser generator for reading, processing, executing, or translating structured text or binary files.
-
auto - A collection of source code generators for Java.
-
Apache Calcite - Dynamic data management framework and SQL parser plugin.
-
Checker Framework - Compiler plug-ins that find bugs or verify their absence.
-
compile-testing - Testing tools for javac and annotation processors.
-
derive4j - Algebraic data types constructors, pattern-matching, morphisms, optics and typeclasses.
-
error-prone - Catch common Java mistakes as compile-time errors.
-
GHCVM - A Haskell to JVM compiler that supports GHC Haskell.
-
Graal - New experimental just-in-time compiler for Java that is integrated with the HotSpot virtual machine.
-
grappa - Java fork of Parboiled. Write grammars with no preprocessing phase.
-
immutables - Generate simple, safe and consistent value objects.
-
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.
-
JSweet - A transpiler from Java to TypeScript/JavaScript.
-
MPS - Design and build extensible DSLs and editors.
-
lombok - Reduce the amount of boilerplate code that is commonly written for Java classes.
-
parboiled - Parsing of arbitrary input text based on parsing expression grammars.
-
Sulong - LLVM IR interpreter written in Java using Truffle and Graal.
-
TeaVM - Ahead-of-time translating compiler (transpiler) from Java bytecode to JavaScript.
-
Truffle - Framework for implementing languages as simple interpreters.
-
Xtext - Framework for development of programming languages and DSLs.
Native
Interconnecting JVM and native code
-
hawtjni - A JNI code generator based on the JNI generator used in Eclipse SWT.
-
Java Grinder - Compile Java bytecode to microcontroller assembly.
-
j2v8 - Java API for Google’s V8 JavaScript engine.
-
JavaCPP - JavaCPP provides efficient access to native C++ inside Java.
-
jnr-ffi - Load native libraries without writing JNI code by hand.
-
jssembly - Execution of native assembly from Java.
-
NuProcess - A low-overhead, non-blocking I/O, external Process execution implementation for Java.
-
Project Panama - Enriching the connections between the JVM and APIs used by C programmers.
Network
Tools for network programming, packet capture, monitoring, testing and resiliency.
-
Aeron - Efficient reliable UDP unicast, UDP multicast, and IPC message transport.
-
armeria - Asynchronous RPC/API client/server library built on top of Java 8, Netty 4.1, HTTP/2, and Thrift.
-
Chronicle-Network - A High Performance Network library.
-
comcast - Simulating shitty network connections.
-
gor - HTTP traffic replay in real-time.
-
gRPC - A high performance, open source, general RPC framework that puts mobile and HTTP/2 first.
-
jRT - Measures response time of a java application to socket-based requests.
-
JXIO - Java API over AccelIO (C library), a high-performance asynchronous reliable messaging and RPC library optimized for hardware acceleration.
-
K3PO - Create arbitrary network traffic and behavior to certify whether a network endpoint behaves correctly.
-
muxy - Simulating real-world distributed system failures.
-
Netty - Async event-driven network library for high performance protocol servers & clients.
-
okhttp - An HTTP+HTTP/2 client for Android and Java applications.
-
one-nio - library for building high performance Java servers.
-
proteus-java - Proteus Java Client based on RSocket.
-
reactive-grpc - Reactive gRPC is a suite of libraries for using gRPC with Reactive Streams programming libraries.
-
RSocket - RSocket is a binary protocol for use on byte stream transports such as TCP, WebSockets, and Aeron.
-
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.
-
bcc - Tools for BPF-based Linux IO analysis, networking, monitoring, and more.
-
Flame Graphs - Visualization of profiled software, allowing the most frequent code-paths to be identified quickly and accurately.
-
ioping - Simple disk I/0 latency measuring tool.
-
javap - Disassembles class files into code that reflects the java bytecode.
-
jhat - Java Heap Analysis Tool
-
jhsdb - Launch a postmortem debugger to analyze the content of a core-dump from a crashed JVM.
-
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.
-
sysdig - Capture system state and activity from a running Linux instance, then save, filter and analyze.
-
sysstat - Performance monitoring tools for Linux.
-
taskset/process-affinity - Retrieve or set a processes’s CPU affinity.
-
tiptop - Like top but also shows instructions per cycle (IPC).
Profilers
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.
-
async-profiler - Sampling CPU profiler for Java featuring AsyncGetCallTrace + perf_events.
-
BTrace - a safe, dynamic tracing tool for the Java platform.
-
Byteman - tracing, monitoring and testing tool for Java
-
bytestacks - Turn JVM bytecode execution into flame graphs.
-
Chronon - Record your entire java program. Replay on any machine.
-
GCeasy - Machine learning guided Garbage collection log analysis tool. Auto-detect problems in the JVM GC logs and recommend solutions to it.
-
GCViewer - GCViewer is a tool that visualizes verbose GC output.
-
grav - A collection of tools to help visualise process execution.
-
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.
-
HdrLogProcessing - Utilities for HDR Histogram logs manipulation.
-
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 Flight Recorder (JFR) - Tool for collecting diagnostic and profiling data about a running Java application with almost no performance overhead.
-
java-sizeof - Memory consumption estimator for Java.
-
jcstress - Experimental harness and tests to aid the research in the correctness of concurrency support in the JVM, class libraries, and hardware.
-
jfr-flame-graph - Converting JFR Method Profiling Samples to FlameGraph compatible format.
-
jfr-report-tool - Tool for creating reports from Java Flight Recorder dumps.
-
jitwatch - Log analyser / visualiser for Java HotSpot JIT compiler.
-
jitwatch-intellij - JITWatch plugin for IntelliJ IDEA.
-
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.
-
jmh-compare-gui - GUI for comparing JMH results.
-
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.
-
jvm-profiler - Java Agent to collect various metrics and stacktraces for Hadoop/Spark JVM processes in a distributed way.
-
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.
-
micrometer - An application metrics facade for the most popular monitoring tools.
-
osquery - osquery is an instrumentation framework that expose the operating system as a high-performance relational database.
-
Overseer - Low-Level Hardware Monitoring and Management for Java.
-
OpenTracing - A vendor-neutral open standard for distributed tracing.
-
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.
-
Tracer - Manages custom trace identifiers and carries them through distributed systems.
-
YourKit - Fully featured, easy to use, low overhead profiler.
-
Zipkin - A distributed tracing system gather timing data for disparate services developed by Twitter.
Runtimes
Tools for managing jvm runtime processes
-
Capsule - Dead-Simple Packaging and Deployment for JVM Apps.
-
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
Virtual machines that implement the JVM specification or parts of it.
-
Avian - Lightweight highly portable JVM with an option for AOT compilation.
-
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.
-
Eclipse OpenJ9 - Eclipse OpenJ9.
-
J2ObjC - Translator from Java source to Objective-C code. Keeps shared code between iOS native apps and Android native apps.
-
jvm.go - A JVM written in Go.
-
ParparVM - An Open Source Java bytecode to C translator for iOS native development. Designed as a part of the Codename One WORA for mobile project.
-
MobiDevelop’s RoboVM Fork - Ahead of time compiler for JVM bytecode targeting iOS, Mac OSX and Linux.
-
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.
Resources
Documentation
Documentation related to JVM
Active discussions.
Videos, podcasts and other media related to JVMs
People
People that share hard-earned, often undocumented, knowledge and data of the inner workings of the JVM
-
Aleksey Shipilëv - Developing Oracle/Open JDK/Hotspot and other Java-related technologies.
-
Andrey Breslav - Lead Language Designer of Kotlin @ JetBrains.
-
Brian Goetz - Java Language Architect at Oracle.
-
Ben Christensen - Facebook, Netflix, Apple engineering.
-
Brendan Gregg - Cloud performance, kernel engineer, speaker, author.
-
Charles Nutter - JRuby guy.
-
Claes Redestad - Working with OpenJDK stuff @ Oracle.
-
Cliff Click - Creator of the HotSpot Server Compiler.
-
Dave Dice - Senior research scientist in the Scalable Synchronization Research Group within Oracle.
-
Dávid Karnok - RxJava committer that blogs about advanced RxJava.
-
Doug Lea - Author of the Java memory model.
-
Gil Tene - Azul Systems.
-
Heinz Kabutz - Author of 250+ Java Specialists’ Newsletters.
-
Ivan Krylov - JVM expert.
-
Jake Wharton - Square, Google, open source hacker.
-
John Rose - HotSpot developer.
-
Jonas Bonér - Founder & CTO of Lightbend.
-
Lukas Eder - Blogger. Author of JOOQ.
-
Marcus Lagergren - Java language team alumnus.
-
Mark Reinhold - Chief Architect, Java Platform Group, Oracle.
-
Martin Thompson - Pasty faced performance gangster.
-
Martijn Verburg - Java Champion.
-
Kirk Pepperdine - Working in high performance and distributed computing for nearly 20 years.
-
Nitsan Wakart - Azul Systems.
-
Norman Maurer - Netty developer.
-
Paul Phillips - Forever undisputed SLOC Scala compiler dev.
-
Per Liden - Hacking on the HotSpot JVM at Oracle.
-
Peter Lawrey - Innovative developer of high performance Java systems for competitive advantage.
-
Rafael Winterhalter - Author of ByteBuddy.
-
Richard Warburton - Developer, Speaker, Author.
-
Richard Startin - Performance Analyst, developer, blogger.
-
Ron Pressler - Parallel Universe. Leading Fibers and Continuations for the JVM.
-
Stephen Colebourne - Java Champion. Occasional blogger and speaker. Best known for Joda projects and JSR-310.
-
Todd L. Montgomery - Ex-CTO, Ex-NASA researcher, network geek, messaging middleware designer.
-
Stéphane Maldini - Project Reactor Lead @Pivotal.
-
Stuart Marks - Doctor Deprecator. Java/JDK/OpenJDK developer
-
Vladimir Ivanov - hacking HotSpot JVM @ Oracle.
-
Viktor Klang - Deputy CTO at Typesafe Inc.
Contributing
Contributions are very welcome!
Please have a look at contributing.md for guidelines.