Skip to content

Latest commit

 

History

History
277 lines (225 loc) · 21.9 KB

readme.md

File metadata and controls

277 lines (225 loc) · 21.9 KB

Awesome JVM Awesome

A curated list of awesome JVM low level and performance 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.

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 - 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.
  • 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.

Memory and concurrency

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.

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.
  • 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.

Native

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.

Network

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.

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.
  • 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.

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.
  • 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.

Runtimes

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

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.

Resources

Documentation

Documentation related to JVM

Communities

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.

Media

Videos, podcasts and other media related to JVMs

People

People related to JVM development

Contributing

Contributions are very welcome!

Please have a look at contributing.md for guidelines.