Your first time on this page? Allow me to give some explanations.
Awesome JVM
A curated list of awesome loosely performance related JVM stuff. Inspired by awesome-python.
Here you can see meta information about this topic like the time we last updated this page, the original creator of the awesome list and a link to the original GitHub repository.
Thank you deephacks & contributors
View Topic on GitHub:
deephacks/awesome-jvm
Search for resources by name or description.
Simply type in what you are looking for and the results will be filtered on the fly.
Further filter the resources on this page by type (repository/other resource), number of stars on GitHub and time of last commit in months.
Bytecode
Jitescript - Java API for Bytecode
Used to develop tools for the production of Java .class files.
Garbage collectors
Providing continuous, pauseless operation for Java applications.
GC policy available in the Java Virtual Machine for IBM WebSphere Application Server V8.
Completely passive GC implementation with bounded allocation limit, and lowest runtime performance overhead possible.
Book that addresses new challenges to garbage collection made by recent advances in hardware and software.
Garbage collector optimized for low latency and very large heaps.
Load tools
A constant throughput, correct latency recording variant of wrk
Asynchronous non-blocking scenario driven load testing tool for testing HTTP servers.
Languages
Frege is a Haskell for the JVM. It brings purely functional programing to the Java platform.
GoJava - Java bindings for Go packages
JPHP - an implementation of PHP on Java VM
Rembulan, an implementation of Lua 5.3 for the Java Virtual Machine
Object-oriented, strong and static programming language with an emphasis on immutability, created by Red Hat.
Dialect of Lisp created by Rich Hickey. Dynamically typed with emphasis on functional programming.
Optionally typed and dynamic language, with static-typing and static compilation capabilities.
General-purpose, concurrent, strongly typed, class-based object-oriented language.
Extension of the Scheme language, which is in the Lisp family of programming languages.
Statically typed programming language for the JVM, Android and the browser.
Java-centric implementation of lua vm built to leverage standard Java features.
Lightweight high-performance JavaScript runtime in Java with a native JVM.
Supports OCaml language v4. Generates plain Java bytecode and have seamless integration with Java.
Strong and static programming language that combine object-oriented and functional programming ideas.
Flexible and expressive dialect of Java, which compiles into Java 5 source code.
Machine Learning
Statistical Machine Intelligence & Learning Engine
Open-Source, Distributed, Deep Learning Library for the JVM.
Memory and concurrency
Reactive Programming for Android
High Performance data structures and utility methods for Java
Bloofi: A java implementation of multidimensional Bloom filters
A high performance caching library for Java
Chronicle Bytes has a similar purpose to Java NIO's ByteBuffer with many extensions
Micro second messaging that stores everything to disk
Replicate your Key Value Store across your network, with consistency, persistance and performance.
Clojure's data structures modified for use outside of Clojure
binary serialization format
High performance Java implementation of a Cuckoo filter - Apache Licensed
An advanced, but easy to use, platform for writing functional applications in Java 8.
Eclipse Collections is a collections framework for Java with optimized data structures and a rich, functional and fluent API.
External-Memory Sorting in Java
Fault tolerance and resilience patterns for the JVM
A Java library for quickly and efficiently parsing and writing UUIDs
Geohash utitlies in java
GS Collections has been migrated to the Eclipse Foundation, re-branded as Eclipse Collections. https://www.eclipse.org/collections/
Hollow is a java library and toolset for disseminating in-memory datasets from a single producer to many consumers for high performance read-only access.
A fork of Cliff Click's High Scale Library. Improved with bug fixes and a real build system.
High Performance Primitive Collections for Java
Java port of a concurrent trie hash map implementation from the Scala collections library
Java library for the HyperLogLog algorithm
A simple integer compression library in Java
Implementation of various string similarity and distance algorithms: Levenshtein, Jaro-winkler, n-Gram, Q-Gram, Jaccard index, Longest Common Subsequence edit distance, cosine similarity ...
jOOλ - The Missing Parts in Java 8 jOOλ improves the JDK libraries in areas where the Expert Group's focus was elsewhere. It adds tuple support, function support, and a lot of additional functionality around sequential Streams. The JDK 8's main efforts (default methods, lambdas, and the Stream API) were focused around maintaining backwards compatibility and implementing a functional API for parallelism.
Java Collections till the last breadcrumb of memory and performance
Port of LevelDB to Java
A very memory-efficient trie (radix tree) implementation
LMDB for Java
Lightning Memory Database (LMDB) for Java: a low latency, transactional, sorted, embedded, key-value store
Library for creating In-memory circular buffers that use direct ByteBuffers to minimize GC overhead
LWJGL is a Java library that enables cross-platform access to popular native APIs useful in the development of graphics (OpenGL, Vulkan), audio (OpenAL), parallel computing (OpenCL, CUDA) and XR (OpenVR, LibOVR) applications.
Immutable key/value store with efficient space utilization and fast reads. They are ideal for the use-case of tables built by batch processes and shipped to multiple servers.
Java large off heap cache
A modern I/O library for Android, Kotlin, and Java.
The Java API for Onyx
A java.util.HashMap compatible map that won't stall puts or gets when resizing
A Persistent Java Collections Library
Immutable in-memory R-tree and R*-tree implementations in Java with reactive api
RTree2D is a 2D immutable R-tree with STR (Sort-Tile-Recursive) packing for ultra-fast nearest and intersection queries
A better compressed bitset in Java
Rolling hash functions in Java
RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
A gulp of low latency Java
Simple Binary Encoding (SBE) - High Performance Message Codec
Parallel boolean circuit evaluation
A fast object pool for the JVM
Stream summarizer and cardinality estimator.
Fast integer compression in C using the StreamVByte codec
A Java implementation of Transducers
a fast, scalable, multi-language and extensible build system
gRPC and protocol buffers for Android, Kotlin, and Java.
Zero-allocation hashing for Java
A high-performance cross-system data layer for columnar in-memory analytics.
Insanely fast data interchange format and capability-based RPC system.
Library of lightweight, self-contained mathematics and statistics components.
Efficient cross platform serialization library for C++, C#, Go, Java, JavaScript, PHP, and Python.
Concurrent data structures currently missing from the JDK.
A small, zero-dep functional util library originating from Google.
Memory buffer pool implementation similar to jemalloc.
Columnar storage format that uses the record shredding and assembly algorithm described in the Dremel paper.
Standard for asynchronous stream processing with non-blocking back pressure.
Reactive data applications on the JVM for Java, Groovy, Clojure and other.
A Java software library of stochastic streaming algorithms.
Metaprogramming
A collection of source code generators for Java.
Testing tools for javac and annotation processors
Java 8 annotation processor and framework for deriving algebraic data types constructors, pattern-matching, folds, optics and typeclasses.
Catch common Java mistakes as compile-time errors
The Eta Programming Language, a dialect of Haskell on the JVM
Write parsers for arbitrary text inputs, entirely in Java, with no preprocessing phase
Java 1-15 Parser and Abstract Syntax Tree for Java, including preview features to Java 13
A Java API for generating .java source files.
Build parsers in Java
Elegant parsing in Java and Scala - lightweight, easy-to-use, powerful.
Obsolete repository. Moved to oracle/graal.
Compiler of Java bytecode to JavaScript
GraalVM: Run Programs Faster Anywhere
Parser generator for reading, processing, executing, or translating structured text or binary files.
Dynamic data management framework and SQL parser plugin.
Compiler plug-ins that find bugs or verify their absence.
New experimental just-in-time compiler for Java that is integrated with the HotSpot virtual machine.
Reduce the amount of boilerplate code that is commonly written for Java classes.
Native
A JNI code generator based on the JNI generator used by the eclipse SWT project
Compile Java byte-code to native CPU's.
Java Bindings for V8
The missing bridge between Java and native C++
Java Abstracted Foreign Function Layer
Jssembly is a library that allows you to execute native assembly from Java.
Low-overhead, non-blocking I/O, external Process implementation for Java
Enriching the connections between the JVM and APIs used by C programmers.
Network
Efficient reliable UDP unicast, UDP multicast, and IPC message transport
Your go-to microservice framework for any situation, from the creator of Netty et al. You can build any type of microservice leveraging your favorite technologies, including gRPC, Thrift, Kotlin, Retrofit, Reactive Streams, Spring Boot and Dropwizard.
A High Performance Network ( TCP/IP ) Library
Simulating shitty network connections so you can build better systems.
GoReplay is an open-source tool for capturing and replaying live HTTP traffic into a test environment in order to continuously test your system with real data. It can be used to increase confidence in code deployments, configuration changes and infrastructure changes.
jRT measures the response time of a java application to socket-based requests
Java API over Accelio
"I am fluent in over 6 million forms of communication!"
Chaos engineering tool for simulating real-world distributed system failures
Square’s meticulous HTTP client for the JVM, Android, and GraalVM.
Unconventional I/O library for Java
Proteus Java Client
Reactive stubs for gRPC
Tools for keeping your cloud operating in top form. Chaos Monkey is a resiliency tool that helps applications tolerate random instance failures.
A Java library for capturing, crafting, and sending packets.
A Linux packet crafting tool.
TCP/IP packet demultiplexer. Download from:
Pcap editing and replay tools for *NIX and Windows - Users please download source from
A high performance, open source, general RPC framework that puts mobile and HTTP/2 first.
Async event-driven network library for high performance protocol servers & clients.
RSocket is a binary protocol for use on byte stream transports such as TCP, WebSockets, and Aeron.
Nix tools
BCC - Tools for BPF-based Linux IO analysis, networking, monitoring, and more
simple disk I/0 latency measuring tool
Performance monitoring and benchmarking suite
Performance analysis tools based on Linux perf_events (aka perf) and ftrace
Logging of system and process activity for long-term analysis, highlighting overloaded system.
Visualization of profiled software, allowing the most frequent code-paths to be identified quickly and accurately.
Disassembles class files into code that reflects the java bytecode.
Launch a postmortem debugger to analyze the content of a core-dump from a crashed JVM.
Prints configuration information for a given process.
Prints stack traces of threads for a given Java process.
Reports the structure of the processor, number of cores, hyperthreads and cache size.
System-wide hardware performance monitoring with easy-to-use interface at low overhead.
Capture system state and activity from a running Linux instance, then save, filter and analyze.
Retrieve or set a processes’s CPU affinity.
Profilers
A Java agent that rewrites bytecode to instrument allocation sites
Java memory allocation profiler
Sampling CPU and HEAP profiler for Java featuring AsyncGetCallTrace + perf_events
BTrace - a safe, dynamic tracing tool for the Java platform
Turn -XX:+TraceBytecodes output into a FlameGraph compatible stack format
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)
Performance visualisation tools
Tools for tracking down memory / JVM problems & generating predictable-as-possible VM behaviour
Utilities for HDR Histogram logs manipulation
production heap profiling for the JVM. compatible with google-perftools.
A sampling JVM profiler without the safepoint sample bias
Java Agent for Memory Measurements
Memory consumption estimator for Java
Get Method Sampling from Java Flight Recorder Dump and convert to FlameGraph compatible format.
Tool for creating reports from Java Flight Recorder dumps
Log analyser / visualiser for Java HotSpot JIT compiler. Inspect inlining decisions, hot methods, bytecode, and assembly. View results in the JavaFX user interface.
JITWatch plugin for IntelliJ IDEA
GUI for comparing JMH results
Java monitoring for the command-line, profiler included
JVM Profiler Sending Metrics to Kafka, Console Output or Custom Reporter
A memory leak detection library for Android.
An application metrics facade for the most popular monitoring tools. Think SLF4J, but for metrics.
A java agent to generate method mappings to use with the linux perf
tool
PerfJ is a wrapper of linux perf for java programs.
OOM diagnostics for Java.
Sends stacktrace-level performance data from a JVM process to Riemann.
Simple JVM Profiler Using StatsD and Other Metrics Backends
Small set of tools for JVM troublshooting, monitoring and profiling.
Best-of-breed OpenTracing utilities, instrumentations and extensions
Zipkin is a distributed tracing system
Machine learning guided Garbage collection log analysis tool. Auto-detect problems in the JVM GC logs and recommend solutions to it.
A Histogram that supports recording and analyzing sampled data value counts.
A Metrics Reservoir implementation backed by HdrHistogram.
Tool for collecting diagnostic and profiling data about a running Java application with almost no performance overhead.
Experimental harness and tests to aid the research in the correctness of concurrency support in the JVM, class libraries, and hardware.
jHiccup is an open source tool designed to measure the pauses and stalls associated with an application’s underlying Java runtime platform.
Micro benchmarks written in Java and other languages targetting the JVM.
Analyze actual object layout schemes, footprint, and references in JVMs.
Helps resolve performance bottlenecks, pin down memory leaks and understand threading issues.
Provide a native API to inspect the state and to control the execution of applications running in the JVM.
Java heap analyzer that help find memory leaks and reduce memory consumption.
Measure the behavior of critical components in production environment.
osquery is an instrumentation framework that expose the operating system as a high-performance relational database.
Low-Level Hardware Monitoring and Management for Java.
Runtimes
Dead-Simple Packaging and Deployment for JVM Apps
Fast JVM launching without the hassle of persistent JVMs.
Java unlimited redefinition of classes at runtime.
Terminate the JVM when resources are exhausted
Nailgun is a client, protocol, and server for running Java programs from the command line without incurring the JVM startup overhead.
Virtual Machines
[INACTIVE] Avian is a lightweight virtual machine and class library designed to provide a useful subset of Java's features, suitable for building self-contained applications.
Eclipse OpenJ9: A Java Virtual Machine for OpenJDK that's optimized for small footprint, fast start-up, and high throughput. Builds on Eclipse OMR (https://github.com/eclipse/omr) and combines with the Extensions for OpenJDK for OpenJ9 repo.
A Java to iOS Objective-C translation tool and runtime.
A toy JVM written in Go
Write once run anywhere native mobile apps using with Java 8 or Kotlin. Supports iOS (iPhone/iPad), Android, Windows (UWP) & others
Ahead of time compiler for JVM bytecode targetting iOS, Mac OSX and Linux
Android runtime (ART) is the managed runtime used by applications and some system services on Android.
Modification of Java HotSwap VM with unlimited support for reloading classes at runtime.
HotSpot virtual machine maintained and distributed by Oracle Corporation.
The only JVM that eliminates Java garbage collection pauses for large heap sizes.
The only certified multi-platform build of OpenJDK: Free, 100% open source Java.
Documentation
Examples and hands-on labs for Linux tracing tools workshops
Class materials for a distributed systems lecture series
Linux bcc/BPF using tcplife by Brendan Gregg
mini-post series where every post goes deep for only a single topic by Aleksey Shipilёv.
Discussion on Mechanical Sympathy.
Threads impact the performance of each other while modifying independent variables sharing the same cache line. Martin Thompson.
Starting point for discussions of and information concerning the Java Memory Model.
Unofficial guide to implementing the new Java Memory Model (JMM) specified by JSR-133.
HotSpot Virtual Machine Garbage Collection Tuning Guide.
Design decisions, experience and constraints explained in high performance messaging systems.
Digest of the top 10 performance related mistakes Martin Thompson has seen in production.
The Utilization Saturation and Errors (USE) Method is a methodology for analyzing the performance of any system. Brendan Gregg.
For expert programmers familiar with Java concurrency, but unfamiliar with the memory order modes available in JDK 9 provided by VarHandles.
Measure instructions per cycle (IPC) for CPU utilization. Brendan Gregg.
Brendan Gregg.
Emmanuel Goossaert.
Communities
Technical discussion about the development of the HotSpot bytecode compilers.
Technical discussion about the development of the HotSpot garbage collectors.
Discussing how to code sympathetically to and measure the underlying stack/platform so good performance can be extracted.
For expert Java developers who want to push their systems to the next level
Venue for discussing the latest research and developments in the area of managed language execution.
Media
The GC edition. Shenandoah, ZGC, Zing, Fibers, Falcon etc.
Nitsan Wakart.
Martin Thompson.
John Cuthbertson.
Brendan Gregg.
Brendan Gregg.
Aleksey Shipilëv slightly-deeper-than-usual Shenandoah talk from Virtual Machine Meetup 2017.
Aleksey Shipilev - Devoxx 2017/11
Volker Simonis.
Programming and Performance Intro.
Bugs and Coding Styles.
Fast Bytecodes for Funny Languages.
Struct of Arrays vs Array of Structs.
The 3 Hardest Problems in Programming.
Modern Hardware Performance and Cache Lines.
Cliff Click.
Sasha Goldshtein.
People
Developing Oracle/Open JDK/Hotspot and other Java-related technologies.
Senior research scientist in the Scalable Synchronization Research Group within Oracle.
Working in high performance and distributed computing for nearly 20 years.
Innovative developer of high performance Java systems for competitive advantage.
Parallel Universe. Leading Fibers and Continuations for the JVM.
Java Champion. Occasional blogger and speaker. Best known for Joda projects and JSR-310.
Ex-CTO, Ex-NASA researcher, network geek, messaging middleware designer.