Awesome JVM Awesome

A curated list of awesome JVM low level, performance and non-framework related stuff.

Bytecode

Tools for bytecode manipulation and analysis.

Garbage collectors

Garbage collectors for the JVM.

Load tools

Tools that generate load and measure the system accurately without coordinated omission

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

Memory and concurrency

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

Metaprogramming

Parsers, interpreters, compilers and source generation targeted for the JVM.

Native

Interconnecting JVM and native code

Network

Tools for network programming, packet capture, monitoring, testing and resiliency.

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

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 * TCP Tracepoints Linux bcc/BPF using tcplife by Brendan Gregg * Linux tracing workshop - JVM monitoring with BPF, examples and hands-on labs for Linux tracing tools workshops. * JVM Anatomy Park - mini-post series where every post goes deep for only a single topic by Aleksey Shipilёv. * Coordinated Omission problem - Discussion on Mechanical Sympathy. * False sharing - Threads impact the performance of each other while modifying independent variables sharing the same cache line. Martin Thompson. * The JVM specification - The Java Virtual Machine Specification Java SE 8 Edition. * The Java Memory Model - Starting point for discussions of and information concerning the Java Memory Model. * The JSR-133 Cookbook for Compiler Writers - Unofficial guide to implementing the new Java Memory Model (JMM) specified by JSR-133. * Garbage Collection Tuning Guide - HotSpot Virtual Machine Garbage Collection Tuning Guide. * Safepoints - Where is my safepoint? Nitsan Wakart. * Topics in High-Performance Messaging - Design decisions, experience and constraints explained in high performance messaging systems. * Top 10 Performance Mistakes - Digest of the top 10 performance related mistakes Martin Thompson has seen in production. * The USE method - The Utilization Saturation and Errors (USE) Method is a methodology for analyzing the performance of any system. Brendan Gregg. * An introduction to distributed systems - Kyle Kingsbury (author of Jepsen). * Using JDK 9 Memory Order Modes - For expert programmers familiar with Java concurrency, but unfamiliar with the memory order modes available in JDK 9 provided by VarHandles. * CPU Utilization is Wrong - Measure instructions per cycle (IPC) for CPU utilization. Brendan Gregg. * Linux Load Averages: Solving the Mystery - Brendan Gregg. * What every programmer should know about solid-state drives - Emmanuel Goossaert. * Quick Tips for Fast Code on the JVM - Daniel Spiewak. ## Communities

Active discussions.

Media

Videos, podcasts and other media related to JVMs * FOSDEM 2018 - FOSDEM 2018 Free Java devroom. * JFokus 2018 - The GC edition. Shenandoah, ZGC, Zing, Fibers, Falcon etc. * G1 Garbage Collector in Java 8/9 - Kirk Pepperdine. * Extreme Profiling: Digging Into Hotspots - Nitsan Wakart. * Java vs. C Performance - Cliff Click. * Why JNI is slow? - Cliff Click * A Crash Course in Modern Hardware - Cliff Click * Java Profiling from the Ground Up - Nitsan Wakart. * The Illusion of Execution - Nitsan Wakart. * Mythbusting Modern Hardware to Gain ‘Mechanical Sympathy’ - Martin Thompson. * Designing for Performance - Martin Thompson. * How NOT to Measure Latency - Gil Tene. * JVM Language Summit 2015 - JVM Language Summit 2015. * JVM Language Summit 2016 - JVM Language Summit 2016. * JVM Language Summit 2017 - JVM Language Summit 2017. * Bits of advice for VM writers - Cliff Click. * Understanding Java garbage collection … - Gil Tene. * Faster Object Arrays - Gil Tene at GOTO Conferences. * Java Memory Model Pragmatics - Aleksey Shipilev. * With GC Solved, What Else Makes a JVM Pause? - John Cuthbertson. * JVM Mechanics - Douglas Hawkins. * Give me 15 minutes and I’ll change your view of Linux tracing - Brendan Gregg. * Kernel Recipes 2017: Performance Analysis with BPF - Brendan Gregg. * Shenandoah deep talk - Aleksey Shipilëv slightly-deeper-than-usual Shenandoah talk from Virtual Machine Meetup 2017. * Shenandoah: The Garbage Collector That Could - Aleksey Shipilev - Devoxx 2017/11 * Analyzing and Debugging the Java HotSpot VM at the OS Level - Volker Simonis. * Cliff Click podcast 2017/09/16 - Programming and Performance Intro. * Cliff Click podcast 2017/09/16 - Bugs and Coding Styles. * Cliff Click podcast 2017/09/18 - Java vs C/C++. * Cliff Click podcast 2017/09/21 - Debugging Data Races. * Cliff Click podcast 2017/09/24 - Fast Bytecodes for Funny Languages. * Cliff Click podcast 2017/09/28 - Struct of Arrays vs Array of Structs. * Cliff Click podcast 2017/10/04 - The 3 Hardest Problems in Programming. * Cliff Click podcast 2017/11/05 - Modern Hardware Performance and Cache Lines. * Cliff Click podcast 2017/11/09 - Queuing In Practice. * Which technique do programming language parsers and interpreters use? - Cliff Click. * Everything about Stack Traces and Heap Dumps - Andrei Pangin. * Fast and safe production monitoring of JVM with BPF tools - Sasha Goldshtein. * The Future of the Linux Page Cache - Matthew Wilcox.

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.

jvm.md Github