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 150 23 - 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.
Load tools
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 90 7 - 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 3k 149 - Pure functional programming language in the spirit of Haskell.
gojava 150 7 - 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 79 7 - 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 4k 686 - Statistical Machine Intelligence & Learning Engine.
Memory and concurrency
Tools and data structures for efficient memory layout and concurrent access.
Agera 7k 711 - Reactive Programming for Android by Google.
Agrona 866 143 - 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 52 1 - Java implementation of multidimensional Bloom filters
Cap’n Proto - Insanely fast data interchange format and capability-based RPC system.
caffeine 4k 366 - A high performance caching library for Java 8.
Chronicle-Bytes 90 44 - Low level memory access wrappers.
Chronicle-Queue 1k 358 - Micro second messaging that stores everything to disk.
Chronicle-Map 1k 260 - In-memory key-value store designed for low-latency and/or multi-process applications.
clj-ds 146 18 - Clojure's data structures modified for use outside of Clojure.
colfer 266 22 - Binary serialization format and class generator.
commons-math - Library of lightweight, self-contained mathematics and statistics components.
CuckooFilter4J 33 2 - Bloom filter replacement for approximated set-membership queries.
cyclops 419 51 - Integration modules for RxJava, Reactor, FunctionalJava, Guava & Javaslang.
Eclipse Collections 433 129 - Collections framework for Java.
externalsortinginjava 78 55 - Sort very large files using multiple cores and an external-memory algorithm.
failsafe 2k 117 - A lightweight, zero-dependency library for handling failures.
fasttuple 91 10 - Collections that are laid out adjacently in both on- and off-heap memory.
fast-uuid 54 3 - 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 197 57 - Java utility methods for geohashing.
gs-collections 2k 294 - Goldman Sachs collections framework.
hollow 612 74 - Java library and comprehensive toolset for harnessing small to moderately sized in-memory datasets.
high-scale-lib 201 21 - Cliff Click's High Scale Library.
hppc 431 79 - High Performance Primitive Collections.
injector 58 9 - A new Executor for Java.
java-concurrent-hash-trie-map 42 10 - Java port of a concurrent trie hash map implementation from Scala collections.
java-hll 84 14 - Java library for the HyperLogLog algorithm.
JavaFastPFOR 264 39 - Library to compress and uncompress arrays of integers very fast.
java-string-similarity 1k 201 - 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.
jsoniter - Claims to be the fastest JSON parser ever.
jOOL 1k 104 - Useful extensions to Java 8 lambdas.
Koloboke 500 64 - Java Collections til the last breadcrumb of memory and performance.
LevelDB 787 219 - Rewrite (port) of LevelDB in Java.
lightweight_trie 28 3 - A very memory-efficient trie (radix tree) implementation.
lmdbjni 185 30 - Java API to LMDB (HawtJNI) which is an ultra-fast, ultra-compact key-value embedded data store written in C.
lmdbjava 110 17 - Java API to LMDB (JNR) which is an ultra-fast, ultra-compact key-value embedded data store written in C.
low-gc-membuffers 105 7 - In-memory circular buffers that use direct ByteBuffers to minimize GC overhead.
lwjgl3 2k 350 - 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 192 33 - Java large off heap cache developed for Apache Cassandra 3.0.
okio 4k 783 - Modern Java IO library that do clever things to save CPU and memory.
one-nio 70 14 - library for building high performance Java servers.
onyx-java 1 3 - 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 88 7 - A java.util.HashMap compatible map that won't stall puts or gets when resizing.
pcollections 235 29 - A Persistent Java Collections Library.
protobuf - Google's data interchange format.
Quasar - Lightweight threads and actors for the JVM.
rtree 539 112 - Immutable in-memory R-tree and R*-tree implementations in Java with reactive api.
Reactive Streams - Standard for asynchronous stream processing with non-blocking back pressure.
Reactive Streams Utilities - Future standard utilities library for Reactive Streams.
RoaringBitmap 405 72 - A better compressed bitset in Java.
rollinghashjava 15 4 - Rolling hash functions in Java.
Reactor - Reactive data applications on the JVM for Java, Groovy, Clojure and other.
RxJava 34k 7k - Library for composing asynchronous and event-based programs using observable sequences.
SmoothieMap 119 18 - java.util.Map impl with worst put latencies more than 100 times smaller than java.util.HashMap.
Simple Binary Encoding 1k 264 - High Performance Message Codec.
splitmap - A parallel bitmap implementation.
DataSketches - A Java software library of stochastic streaming algorithms.
stormpot 108 12 - A fast object pool for the JVM.
stream-lib 2k 474 - A Java library for summarizing data in streams for which it is infeasible to store all events.
streamvbyte 54 5 - Fast integer compression in C using the StreamVByte codec.
TraneIO - High-performance implementation of the Future abstraction.
transducers-java 56 4 - Composable algorithmic transformations independent from the context of their input and output sources.
VarInt 6k 1k - No-deps variable int implementation without deps (by Bazel).
vavr - Functional Library for Java 8+.
wire 2k 354 - Clean, lightweight protocol buffers for Android and Java.
Zero-Allocation-Hashing 206 43 - Hashing any sequences of bytes in Java, including all kinds of primitive arrays, buffers, CharSequences and more.
Metaprogramming
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 7k 838 - 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 417 95 - Testing tools for javac and annotation processors.
derive4j 273 33 - Algebraic data types constructors, pattern-matching, morphisms, optics and typeclasses.
error-prone 4k 496 - Catch common Java mistakes as compile-time errors.
GHCVM 332 16 - 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 43 9 - 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 2k 420 - Java 1.8 Parser and Abstract Syntax Tree for Java.
JavaPoet 4k 512 - A Java API for generating .java source files.
jparsec 181 42 - 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 1k 135 - Parsing of arbitrary input text based on parsing expression grammars.
Sulong 372 57 - LLVM IR interpreter written in Java using Truffle and Graal.
TeaVM 787 116 - Ahead-of-time translating compiler (transpiler) from Java bytecode to JavaScript.
Truffle 321 52 - Framework for implementing languages as simple interpreters.
Xtext - Framework for development of programming languages and DSLs.
Native
Interconnecting JVM and native code
hawtjni 62 35 - A JNI code generator based on the JNI generator used in Eclipse SWT.
Java Grinder 4 2 - Compile Java bytecode to microcontroller assembly.
j2v8 - Java API for Google's V8 JavaScript engine.
JavaCPP 2k 314 - JavaCPP provides efficient access to native C++ inside Java.
jnr-ffi 445 70 - Load native libraries without writing JNI code by hand.
jssembly 87 4 - Execution of native assembly from Java.
NuProcess 219 39 - 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 3k 372 - Efficient reliable UDP unicast, UDP multicast, and IPC message transport.
armeria 1k 293 - Asynchronous RPC/API client/server library built on top of Java 8, Netty 4.1, HTTP/2, and Thrift.
comcast 1k 82 - Simulating shitty network connections.
gor 7k 651 - HTTP traffic replay in real-time.
gRPC - A high performance, open source, general RPC framework that puts mobile and HTTP/2 first.
jRT 21 8 - Measures response time of a java application to socket-based requests.
JXIO 9 7 - Java API over AccelIO (C library), a high-performance asynchronous reliable messaging and RPC library optimized for hardware acceleration.
K3PO 18 43 - Create arbitrary network traffic and behavior to certify whether a network endpoint behaves correctly.
muxy 587 18 - Simulating real-world distributed system failures.
Netty - Async event-driven network library for high performance protocol servers & clients.
okhttp 27k 7k - An HTTP+HTTP/2 client for Android and Java applications.
reactive-grpc 64 7 - 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 6k 814 - Resiliency tool that helps ensure that your applications can tolerate random instance failures.
pcap4j 649 264 - Java library for capturing, crafting, and sending packets using libpcap.
pig 292 22 - A Linux packet crafting tool.
tcpdump - Packet analyzer for network traffic capture.
tcpflow 714 133 - Captures TCP connections flows in a way that is convenient for protocol analysis and debugging.
tcpreplay 273 118 - Pcap editing and replay tools.
Nix 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 4k 622 - 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 138 22 - 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 359 79 - 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 1k 94 - 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 - 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 215 44 - Java agent that rewrites bytecode to instrument allocation sites.
aprof 52 6 - Java memory allocation profiler.
async-profiler 399 39 - Sampling CPU profiler for Java featuring AsyncGetCallTrace + perf_events.
BTrace 266 63 - a safe, dynamic tracing tool for the Java platform.
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 2k 523 - GCViewer is a tool that visualizes verbose GC output.
grav - A collection of tools to help visualise process execution.
hawkshaw 30 6 - 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 344 28 - Production heap profiling for the JVM.
honest-profiler 148 17 - Sampling JVM profiler without the safepoint sample bias.
jamm 392 74 - 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 100 22 - 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 90 19 - Converting JFR Method Profiling Samples to FlameGraph compatible format.
jitwatch 1k 206 - Log analyser / visualiser for Java HotSpot JIT compiler.
jitwatch-intellij 134 4 - 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 515 93 - 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 19k 3k - A memory leak detection library for Android and Java.
metrics - Measure the behavior of critical components in production environment.
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 462 87 - Generate method mappings to use with the linux perf
tool.
perfj 304 47 - Linux perf for java programs.
polarbear 16 2 - A tool to help diagnose OutOfMemoryError conditions.
Riemann JVM Profiler 180 5 - JVM agent which sends function-level profiler telemetry to a Riemann server for analysis, visualization, and storage.
statsd-jvm-profiler 247 59 - JVM agent profiler that sends profiling data to StatsD.
Swiss Java Knife 2k 255 - Small set of tools for JVM troublshooting, monitoring and profiling.
Takipi - Tells you when and why code breaks in production.
Tracer 48 17 - Manages custom trace identifiers and carries them through distributed systems.
YourKit - Fully featured, easy to use, low overhead profiler.
Zipkin 5k 1k - A distributed tracing system gather timing data for disparate services developed by Twitter.
Runtimes
Tools for managing jvm runtime processes
Capsule 1k 77 - Dead-Simple Packaging and Deployment for JVM Apps.
CRaSH - The shell for the Java Platform.
Drip 1k 37 - Fast JVM launching without the hassle of persistent JVMs.
HotswapAgent 1k 347 - Redefine classes at runtime and skip the redeploy process.
jvmkill 44 12 - 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 981 153 - 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 1k 181 - Eclipse OpenJ9.
J2ObjC 5k 804 - Translator from Java source to Objective-C code. Keeps shared code between iOS native apps and Android native apps.
jvm.go 2k 237 - A JVM written in Go.
ParparVM 671 223 - An Open Source Java bytecode to C translator for iOS native development. Designed as a part of the Codename One WORA for mobile project.
RoboVM - Create native iOS and Android apps in Java. - Discontinued
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
Communities
Active discussions.
Media
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.
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.
Jake Wharton - Square, Google, open source hacker.
John Rose - HotSpot developer.
Jonas Bonér - Founder & CTO of Lightbend.
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.
Peter Lawrey - Innovative developer of high performance Java systems for competitive advantage.
Richard Warburton - Developer, Speaker, Author.
Richard Startin - Performance Analyst, blogger, tweeter.
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
Viktor Klang - Deputy CTO at Typesafe Inc.
Contributing
Contributions are very welcome!
Please have a look at contributing.md for guidelines.