Awesome JVM Awesome

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.
  • Jitescript150 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.
  • wrk290 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.
  • Frege3k 149 - Pure functional programming language in the spirit of Haskell.
  • gojava150 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.
  • Rembulan79 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.
  • Smile4k 686 - Statistical Machine Intelligence & Learning Engine.

Memory and concurrency

Tools and data structures for efficient memory layout and concurrent access.

  • Agera7k 711 - Reactive Programming for Android by Google.
  • Agrona866 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.
  • bloofi52 1 - Java implementation of multidimensional Bloom filters
  • Cap’n Proto - Insanely fast data interchange format and capability-based RPC system.
  • caffeine4k 366 - A high performance caching library for Java 8.
  • Chronicle-Bytes90 44 - Low level memory access wrappers.
  • Chronicle-Queue1k 358 - Micro second messaging that stores everything to disk.
  • Chronicle-Map1k 260 - In-memory key-value store designed for low-latency and/or multi-process applications.
  • clj-ds146 18 - Clojure's data structures modified for use outside of Clojure.
  • colfer266 22 - Binary serialization format and class generator.
  • commons-math - Library of lightweight, self-contained mathematics and statistics components.
  • CuckooFilter4J33 2 - Bloom filter replacement for approximated set-membership queries.
  • cyclops419 51 - Integration modules for RxJava, Reactor, FunctionalJava, Guava & Javaslang.
  • Eclipse Collections433 129 - Collections framework for Java.
  • externalsortinginjava78 55 - Sort very large files using multiple cores and an external-memory algorithm.
  • failsafe2k 117 - A lightweight, zero-dependency library for handling failures.
  • fasttuple91 10 - Collections that are laid out adjacently in both on- and off-heap memory.
  • fast-uuid54 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.
  • geohash197 57 - Java utility methods for geohashing.
  • gs-collections2k 294 - Goldman Sachs collections framework.
  • hollow612 74 - Java library and comprehensive toolset for harnessing small to moderately sized in-memory datasets.
  • high-scale-lib201 21 - Cliff Click's High Scale Library.
  • hppc431 79 - High Performance Primitive Collections.
  • injector58 9 - A new Executor for Java.
  • java-concurrent-hash-trie-map42 10 - Java port of a concurrent trie hash map implementation from Scala collections.
  • java-hll84 14 - Java library for the HyperLogLog algorithm.
  • JavaFastPFOR264 39 - Library to compress and uncompress arrays of integers very fast.
  • java-string-similarity1k 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.
  • jOOL1k 104 - Useful extensions to Java 8 lambdas.
  • Koloboke500 64 - Java Collections til the last breadcrumb of memory and performance.
  • LevelDB787 219 - Rewrite (port) of LevelDB in Java.
  • lightweight_trie28 3 - A very memory-efficient trie (radix tree) implementation.
  • lmdbjni185 30 - Java API to LMDB (HawtJNI) which is an ultra-fast, ultra-compact key-value embedded data store written in C.
  • lmdbjava110 17 - Java API to LMDB (JNR) which is an ultra-fast, ultra-compact key-value embedded data store written in C.
  • low-gc-membuffers105 7 - In-memory circular buffers that use direct ByteBuffers to minimize GC overhead.
  • lwjgl32k 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.
  • 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.
  • ohc192 33 - Java large off heap cache developed for Apache Cassandra 3.0.
  • okio4k 783 - Modern Java IO library that do clever things to save CPU and memory.
  • one-nio70 14 - library for building high performance Java servers.
  • onyx-java1 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.
  • PauselessHashMap88 7 - A java.util.HashMap compatible map that won't stall puts or gets when resizing.
  • pcollections235 29 - A Persistent Java Collections Library.
  • protobuf - Google's data interchange format.
  • Quasar - Lightweight threads and actors for the JVM.
  • rtree539 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.
  • RoaringBitmap405 72 - A better compressed bitset in Java.
  • rollinghashjava15 4 - Rolling hash functions in Java.
  • Reactor - Reactive data applications on the JVM for Java, Groovy, Clojure and other.
  • RxJava34k 7k - Library for composing asynchronous and event-based programs using observable sequences.
  • SmoothieMap119 18 - java.util.Map impl with worst put latencies more than 100 times smaller than java.util.HashMap.
  • Simple Binary Encoding1k 264 - High Performance Message Codec.
  • DataSketches - A Java software library of stochastic streaming algorithms.
  • stormpot108 12 - A fast object pool for the JVM.
  • stream-lib2k 474 - A Java library for summarizing data in streams for which it is infeasible to store all events.
  • streamvbyte54 5 - Fast integer compression in C using the StreamVByte codec.
  • TraneIO - High-performance implementation of the Future abstraction.
  • transducers-java56 4 - Composable algorithmic transformations independent from the context of their input and output sources.
  • VarInt6k 1k - No-deps variable int implementation without deps (by Bazel).
  • vavr - Functional Library for Java 8+.
  • wire2k 354 - Clean, lightweight protocol buffers for Android and Java.
  • Zero-Allocation-Hashing206 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.
  • auto7k 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-testing417 95 - Testing tools for javac and annotation processors.
  • derive4j273 33 - Algebraic data types constructors, pattern-matching, morphisms, optics and typeclasses.
  • error-prone4k 496 - Catch common Java mistakes as compile-time errors.
  • GHCVM332 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.
  • grappa43 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.
  • javaparser2k 420 - Java 1.8 Parser and Abstract Syntax Tree for Java.
  • JavaPoet4k 512 - A Java API for generating .java source files.
  • jparsec181 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.
  • parboiled1k 135 - Parsing of arbitrary input text based on parsing expression grammars.
  • Sulong372 57 - LLVM IR interpreter written in Java using Truffle and Graal.
  • TeaVM787 116 - Ahead-of-time translating compiler (transpiler) from Java bytecode to JavaScript.
  • Truffle321 52 - Framework for implementing languages as simple interpreters.
  • Xtext - Framework for development of programming languages and DSLs.

Native

Interconnecting JVM and native code

  • hawtjni62 35 - A JNI code generator based on the JNI generator used in Eclipse SWT.
  • j2v8 - Java API for Google's V8 JavaScript engine.
  • JavaCPP2k 314 - JavaCPP provides efficient access to native C++ inside Java.
  • jnr-ffi445 70 - Load native libraries without writing JNI code by hand.
  • jssembly87 4 - Execution of native assembly from Java.
  • NuProcess219 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.

  • Aeron3k 372 - Efficient reliable UDP unicast, UDP multicast, and IPC message transport.
  • armeria1k 293 - Asynchronous RPC/API client/server library built on top of Java 8, Netty 4.1, HTTP/2, and Thrift.
  • comcast1k 82 - Simulating shitty network connections.
  • gor7k 651 - HTTP traffic replay in real-time.
  • gRPC - A high performance, open source, general RPC framework that puts mobile and HTTP/2 first.
  • jRT21 8 - Measures response time of a java application to socket-based requests.
  • JXIO9 7 - Java API over AccelIO (C library), a high-performance asynchronous reliable messaging and RPC library optimized for hardware acceleration.
  • K3PO18 43 - Create arbitrary network traffic and behavior to certify whether a network endpoint behaves correctly.
  • muxy587 18 - Simulating real-world distributed system failures.
  • Netty - Async event-driven network library for high performance protocol servers & clients.
  • okhttp27k 7k - An HTTP+HTTP/2 client for Android and Java applications.
  • RSocket - RSocket is a binary protocol for use on byte stream transports such as TCP, WebSockets, and Aeron.
  • SimianArmy6k 814 - Resiliency tool that helps ensure that your applications can tolerate random instance failures.
  • pcap4j649 264 - Java library for capturing, crafting, and sending packets using libpcap.
  • pig292 22 - A Linux packet crafting tool.
  • tcpdump - Packet analyzer for network traffic capture.
  • tcpflow714 133 - Captures TCP connections flows in a way that is convenient for protocol analysis and debugging.
  • tcpreplay273 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.
  • Flame Graphs - Visualization of profiled software, allowing the most frequent code-paths to be identified quickly and accurately.
  • ioping138 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.
  • likwid359 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-tools1k 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-instrumenter215 44 - Java agent that rewrites bytecode to instrument allocation sites.
  • aprof52 6 - Java memory allocation profiler.
  • async-profiler399 39 - Sampling CPU profiler for Java featuring AsyncGetCallTrace + perf_events.
  • BTrace266 63 - a safe, dynamic tracing tool for the Java platform.
  • 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.
  • GCViewer2k 523 - GCViewer is a tool that visualizes verbose GC output.
  • grav - A collection of tools to help visualise process execution.
  • hawkshaw30 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.
  • heapster344 28 - Production heap profiling for the JVM.
  • honest-profiler148 17 - Sampling JVM profiler without the safepoint sample bias.
  • jamm392 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-sizeof100 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-graph90 19 - Converting JFR Method Profiling Samples to FlameGraph compatible format.
  • jitwatch1k 206 - Log analyser / visualiser for Java HotSpot JIT compiler.
  • jitwatch-intellij134 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.
  • jvmtop515 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.
  • leakcanary19k 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-agent462 87 - Generate method mappings to use with the linux perf tool.
  • perfj304 47 - Linux perf for java programs.
  • polarbear16 2 - A tool to help diagnose OutOfMemoryError conditions.
  • Riemann JVM Profiler180 5 - JVM agent which sends function-level profiler telemetry to a Riemann server for analysis, visualization, and storage.
  • statsd-jvm-profiler247 59 - JVM agent profiler that sends profiling data to StatsD.
  • Swiss Java Knife2k 255 - Small set of tools for JVM troublshooting, monitoring and profiling.
  • Takipi - Tells you when and why code breaks in production.
  • Tracer48 17 - Manages custom trace identifiers and carries them through distributed systems.
  • YourKit - Fully featured, easy to use, low overhead profiler.
  • Zipkin5k 1k - A distributed tracing system gather timing data for disparate services developed by Twitter.

Runtimes

Tools for managing jvm runtime processes

  • Capsule1k 77 - Dead-Simple Packaging and Deployment for JVM Apps.
  • CRaSH - The shell for the Java Platform.
  • Drip1k 37 - Fast JVM launching without the hassle of persistent JVMs.
  • HotswapAgent1k 347 - Redefine classes at runtime and skip the redeploy process.
  • jvmkill44 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.

  • Avian981 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 OpenJ91k 181 - Eclipse OpenJ9.
  • J2ObjC5k 804 - Translator from Java source to Objective-C code. Keeps shared code between iOS native apps and Android native apps.
  • jvm.go2k 237 - A JVM written in Go.
  • ParparVM671 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 influence JVM development and/or the community around it

Contributing

Contributions are very welcome!

Please have a look at contributing.md for guidelines.