960 lines
51 KiB
HTML
960 lines
51 KiB
HTML
<h1 id="awesome-jvm-awesome">Awesome JVM <a
|
||
href="https://github.com/sindresorhus/awesome"><img
|
||
src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg"
|
||
alt="Awesome" /></a></h1>
|
||
<p>A curated list of awesome JVM low level, performance and
|
||
non-framework related stuff.</p>
|
||
<ul>
|
||
<li><a href="#awesome-jvm">Awesome JVM</a>
|
||
<ul>
|
||
<li><a href="#bytecode">Bytecode</a></li>
|
||
<li><a href="#garbage-collectors">Garbage collectors</a></li>
|
||
<li><a href="#load-tools">Load tools</a></li>
|
||
<li><a href="#languages">Languages</a></li>
|
||
<li><a href="#machine-learning">Machine Learning</a></li>
|
||
<li><a href="#memory-and-concurrency">Memory and Concurrency</a></li>
|
||
<li><a href="#metaprogramming">Metaprogramming</a></li>
|
||
<li><a href="#native">Native</a></li>
|
||
<li><a href="#network">Network</a></li>
|
||
<li><a href="#nix-tools">Nix tools</a></li>
|
||
<li><a href="#profilers">Profilers</a></li>
|
||
<li><a href="#runtimes">Runtimes</a></li>
|
||
<li><a href="#virtual-machines">Virtual Machines</a></li>
|
||
</ul></li>
|
||
<li><a href="#resources">Resources</a>
|
||
<ul>
|
||
<li><a href="#communities">Communities</a><br />
|
||
</li>
|
||
<li><a href="#documentation">Documentation</a></li>
|
||
<li><a href="#media">Media</a></li>
|
||
<li><a href="#people">People</a></li>
|
||
</ul></li>
|
||
<li><a href="#contributing">Contributing</a></li>
|
||
</ul>
|
||
<h2 id="bytecode">Bytecode</h2>
|
||
<p><em>Tools for bytecode manipulation and analysis.</em></p>
|
||
<ul>
|
||
<li><a
|
||
href="https://wiki.openjdk.java.net/display/CodeTools/asmtools">asmtools</a>
|
||
- Used to develop tools for the production of Java .class files.</li>
|
||
<li><a href="http://bytebuddy.net">Byte Buddy</a> - Code generation
|
||
library creating Java classes at runtime without the help of a
|
||
compiler.</li>
|
||
<li><a href="https://github.com/qmx/jitescript">Jitescript</a> -
|
||
Bytecode generation library similar to BiteScript.</li>
|
||
</ul>
|
||
<h2 id="garbage-collectors">Garbage collectors</h2>
|
||
<p><em>Garbage collectors for the JVM.</em></p>
|
||
<ul>
|
||
<li><a href="https://www.azul.com/files/wp_pgc_zing_v52.pdf">Azul
|
||
Pauseless Garbage Collection</a> - Providing continuous, pauseless
|
||
operation for Java applications.</li>
|
||
<li><a
|
||
href="http://www.ibm.com/developerworks/websphere/techjournal/1108_sciampacone/1108_sciampacone.html">Balanced
|
||
GC</a> - GC policy available in the Java Virtual Machine for IBM
|
||
WebSphere Application Server V8.</li>
|
||
<li><a href="http://openjdk.java.net/jeps/318">Epsilon GC</a> -
|
||
Completely passive GC implementation with bounded allocation limit, and
|
||
lowest runtime performance overhead possible.</li>
|
||
<li><a
|
||
href="http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html">G1</a>
|
||
- The Garbage-First Garbage Collector.</li>
|
||
<li><a href="http://openjdk.java.net/jeps/189">Shenandoah</a> -
|
||
Ultra-Low-Pause-Time Garbage Collector.</li>
|
||
<li><a href="http://gchandbook.org">The Garbage Collection Handbook</a>
|
||
- Book that addresses new challenges to garbage collection made by
|
||
recent advances in hardware and software.</li>
|
||
<li><a
|
||
href="http://mail.openjdk.java.net/pipermail/announce/2017-October/000237.html">ZGC</a>
|
||
- Garbage collector optimized for low latency and very large heaps.</li>
|
||
</ul>
|
||
<h2 id="load-tools">Load tools</h2>
|
||
<p><em>Tools that generate load and measure the system accurately
|
||
without coordinated omission</em></p>
|
||
<ul>
|
||
<li><a href="http://gatling.io">Gatling</a> - Asynchronous non-blocking
|
||
scenario driven load testing tool for testing HTTP servers.</li>
|
||
<li><a href="https://github.com/giltene/wrk2">wrk2</a> - A constant
|
||
throughput, correct latency recording variant of wrk.</li>
|
||
</ul>
|
||
<h2 id="languages">Languages</h2>
|
||
<p><em>Languages running on the JVM.</em> * <a
|
||
href="http://ceylon-lang.org/">Ceylon</a> - Object-oriented, strong and
|
||
static programming language with an emphasis on immutability, created by
|
||
Red Hat. * <a href="http://clojure.org/">Clojure</a> - Dialect of Lisp
|
||
created by Rich Hickey. Dynamically typed with emphasis on functional
|
||
programming. * <a href="http://www.erjang.org">Erjang</a> - A JVM-based
|
||
Erlang VM. * <a href="http://eta-lang.org/">Eta</a> - Pure, lazy,
|
||
strongly typed functional programming language on the JVM. * <a
|
||
href="https://github.com/Frege/frege">Frege</a> - Pure functional
|
||
programming language in the spirit of Haskell. * <a
|
||
href="https://github.com/sridharv/gojava">gojava</a> - Java bindings for
|
||
Go packages. * <a href="http://golo-lang.org/">Golo</a> - A simple
|
||
dynamic language that makes extensive usage of
|
||
<code>invokedynamic</code>. * <a
|
||
href="http://www.groovy-lang.org/">Groovy</a> - Optionally typed and
|
||
dynamic language, with static-typing and static compilation
|
||
capabilities. * <a
|
||
href="http://www.oracle.com/technetwork/java/javase/overview/index.html">Java</a>
|
||
- General-purpose, concurrent, strongly typed, class-based
|
||
object-oriented language. * <a href="http://jruby.org">JRuby</a> -
|
||
Implementation of the Ruby language on the JVM. * <a
|
||
href="https://github.com/jphp-group/jphp">JPHP</a> - PHP on the Java VM.
|
||
* <a href="http://www.jython.org">Jython</a> - Python for the Java
|
||
Platform. * <a href="http://www.gnu.org/software/kawa/">Kawa</a> -
|
||
Extension of the Scheme language, which is in the Lisp family of
|
||
programming languages. * <a href="http://kotlinlang.org/">Kotlin</a> -
|
||
Statically typed programming language for the JVM, Android and the
|
||
browser. * <a href="http://www.luaj.org/luaj/3.0/README.html">LuaJ</a> -
|
||
Java-centric implementation of lua vm built to leverage standard Java
|
||
features. * <a
|
||
href="http://openjdk.java.net/projects/nashorn/">Nashorn</a> -
|
||
Lightweight high-performance JavaScript runtime in Java with a native
|
||
JVM. * <a href="http://www.ocamljava.org/">OCaml-Java</a> - Supports
|
||
OCaml language v4. Generates plain Java bytecode and have seamless
|
||
integration with Java. * <a
|
||
href="https://github.com/mjanicek/rembulan">Rembulan</a> - Rembulan is
|
||
an implementation of Lua 5.3 for the JVM, written in pure Java with
|
||
minimal dependencies. * <a href="http://www.renjin.org/">Renjin</a> -
|
||
JVM-based interpreter for the R language for the statistical analysis *
|
||
<a href="http://www.scala-lang.org/">Scala</a> - Strong and static
|
||
programming language that combine object-oriented and functional
|
||
programming ideas. * <a href="http://www.eclipse.org/xtend/">Xtend</a> -
|
||
Flexible and expressive dialect of Java, which compiles into Java 5
|
||
source code.</p>
|
||
<h2 id="machine-learning">Machine Learning</h2>
|
||
<ul>
|
||
<li><a href="https://deeplearning4j.org/">Deeplearning4j</a> -
|
||
Open-Source, Distributed, Deep Learning Library for the JVM.</li>
|
||
<li><a href="https://www.h2o.ai/">H2O</a> - Fast statistical, machine
|
||
learning & math runtime.</li>
|
||
<li><a href="https://github.com/haifengl/smile">Smile</a> - Statistical
|
||
Machine Intelligence & Learning Engine.</li>
|
||
</ul>
|
||
<h2 id="memory-and-concurrency">Memory and concurrency</h2>
|
||
<p><em>Tools and data structures for efficient memory layout and
|
||
concurrent access.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/google/agera">Agera</a> - Reactive
|
||
Programming for Android by Google.</li>
|
||
<li><a href="https://github.com/real-logic/Agrona">Agrona</a> - Library
|
||
of data structures and utility methods that are a common need when
|
||
building high-performance applications.</li>
|
||
<li><a href="http://arrow.apache.org/">Apache Arrow</a> - A
|
||
high-performance cross-system data layer for columnar in-memory
|
||
analytics.</li>
|
||
<li><a href="https://github.com/lemire/bloofi">bloofi</a> - Java
|
||
implementation of multidimensional Bloom filters</li>
|
||
<li><a href="https://capnproto.org/">Cap’n Proto</a> - Insanely fast
|
||
data interchange format and capability-based RPC system.</li>
|
||
<li><a href="https://github.com/ben-manes/caffeine">caffeine</a> - A
|
||
high performance caching library for Java 8.</li>
|
||
<li><a
|
||
href="https://github.com/OpenHFT/Chronicle-Bytes">Chronicle-Bytes</a> -
|
||
Low level memory access wrappers.</li>
|
||
<li><a
|
||
href="https://github.com/OpenHFT/Chronicle-Queue">Chronicle-Queue</a> -
|
||
Micro second messaging that stores everything to disk.</li>
|
||
<li><a href="https://github.com/OpenHFT/Chronicle-Map">Chronicle-Map</a>
|
||
- In-memory key-value store designed for low-latency and/or
|
||
multi-process applications.</li>
|
||
<li><a href="https://github.com/krukow/clj-ds">clj-ds</a> - Clojure’s
|
||
data structures modified for use outside of Clojure.</li>
|
||
<li><a href="https://github.com/pascaldekloe/colfer">colfer</a> - Binary
|
||
serialization format and class generator.</li>
|
||
<li><a
|
||
href="http://commons.apache.org/proper/commons-math">commons-math</a> -
|
||
Library of lightweight, self-contained mathematics and statistics
|
||
components.</li>
|
||
<li><a
|
||
href="https://github.com/MGunlogson/CuckooFilter4J">CuckooFilter4J</a> -
|
||
Bloom filter replacement for approximated set-membership queries.</li>
|
||
<li><a href="https://github.com/aol/cyclops">cyclops</a> - Integration
|
||
modules for RxJava, Reactor, FunctionalJava, Guava & Javaslang.</li>
|
||
<li><a href="https://github.com/eclipse/eclipse-collections">Eclipse
|
||
Collections</a> - Collections framework for Java.</li>
|
||
<li><a
|
||
href="https://github.com/lemire/externalsortinginjava">externalsortinginjava</a>
|
||
- Sort very large files using multiple cores and an external-memory
|
||
algorithm.</li>
|
||
<li><a href="https://github.com/jhalterman/failsafe">failsafe</a> - A
|
||
lightweight, zero-dependency library for handling failures.</li>
|
||
<li><a href="https://github.com/boundary/fasttuple">fasttuple</a> -
|
||
Collections that are laid out adjacently in both on- and off-heap
|
||
memory.</li>
|
||
<li><a href="https://github.com/jchambers/fast-uuid">fast-uuid</a> -
|
||
Java library for quickly and efficiently parsing and writing UUIDs.</li>
|
||
<li><a href="http://google.github.io/flatbuffers/">FlatBuffers</a> -
|
||
Efficient cross platform serialization library for C++, C#, Go, Java,
|
||
JavaScript, PHP, and Python.</li>
|
||
<li><a href="https://github.com/davidmoten/geo">geohash</a> - Java
|
||
utility methods for geohashing.</li>
|
||
<li><a
|
||
href="https://github.com/goldmansachs/gs-collections">gs-collections</a>
|
||
- Goldman Sachs collections framework.</li>
|
||
<li><a href="https://github.com/Netflix/hollow">hollow</a> - Java
|
||
library and comprehensive toolset for harnessing small to moderately
|
||
sized in-memory datasets.</li>
|
||
<li><a
|
||
href="https://github.com/boundary/high-scale-lib">high-scale-lib</a> -
|
||
Cliff Click’s High Scale Library.</li>
|
||
<li><a href="https://github.com/carrotsearch/hppc">hppc</a> - High
|
||
Performance Primitive Collections.</li>
|
||
<li><a href="https://github.com/belliottsmith/injector">injector</a> - A
|
||
new Executor for Java.</li>
|
||
<li><a
|
||
href="https://github.com/romix/java-concurrent-hash-trie-map">java-concurrent-hash-trie-map</a>
|
||
- Java port of a concurrent trie hash map implementation from Scala
|
||
collections.</li>
|
||
<li><a
|
||
href="https://github.com/aggregateknowledge/java-hll">java-hll</a> -
|
||
Java library for the HyperLogLog algorithm.</li>
|
||
<li><a href="https://github.com/lemire/JavaFastPFOR">JavaFastPFOR</a> -
|
||
Library to compress and uncompress arrays of integers very fast.</li>
|
||
<li><a
|
||
href="https://github.com/tdebatty/java-string-similarity">java-string-similarity</a>
|
||
- String similarity and distance measures, including Levenshtein edit
|
||
distance and sibblings, Jaro-Winkler, Longest Common Subsequence, cosine
|
||
similarity etc.</li>
|
||
<li><a href="http://jctools.github.io/JCTools/">JCTools</a> - Concurrent
|
||
data structures currently missing from the JDK.</li>
|
||
<li><a href="http://github.com/ngs-doo/dsl-json">DSL-JSON</a> - High
|
||
performance JSON library with advanced compile-time databinding.</li>
|
||
<li><a href="http://jsoniter.com/">jsoniter</a> - Claims to be the
|
||
fastest JSON parser ever (copy of DSL-JSON).</li>
|
||
<li><a href="https://github.com/jOOQ/jOOL">jOOL</a> - Useful extensions
|
||
to Java 8 lambdas.</li>
|
||
<li><a href="https://github.com/OpenHFT/Koloboke">Koloboke</a> - Java
|
||
Collections til the last breadcrumb of memory and performance.</li>
|
||
<li><a href="https://github.com/dain/leveldb">LevelDB</a> - Rewrite
|
||
(port) of LevelDB in Java.</li>
|
||
<li><a
|
||
href="https://github.com/bryanduxbury/lightweight_trie">lightweight_trie</a>
|
||
- A very memory-efficient trie (radix tree) implementation.</li>
|
||
<li><a href="https://github.com/deephacks/lmdbjni">lmdbjni</a> - Java
|
||
API to LMDB (HawtJNI) which is an ultra-fast, ultra-compact key-value
|
||
embedded data store written in C.</li>
|
||
<li><a href="https://github.com/lmdbjava/lmdbjava">lmdbjava</a> - Java
|
||
API to LMDB (JNR) which is an ultra-fast, ultra-compact key-value
|
||
embedded data store written in C.</li>
|
||
<li><a
|
||
href="https://github.com/cowtowncoder/low-gc-membuffers">low-gc-membuffers</a>
|
||
- In-memory circular buffers that use direct ByteBuffers to minimize GC
|
||
overhead.</li>
|
||
<li><a href="https://github.com/LWJGL/lwjgl3">lwjgl3</a> - 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.</li>
|
||
<li><a href="http://www.mapdb.org">MapDB</a> - Collections backed by
|
||
off-heap or on-disk storage.</li>
|
||
<li><a href="https://github.com/indeedeng/mph-table">mph-table</a> -
|
||
Minimal Perfect Hash Tables are an immutable key/value store with
|
||
efficient space utilization and fast reads.</li>
|
||
<li><a href="https://google.github.io/mug/">mug</a> - A small, zero-dep
|
||
functional util library originating from Google.</li>
|
||
<li><a
|
||
href="http://netty.io/wiki/using-as-a-generic-library.html#wiki-h2-1">netty-buffers</a>
|
||
- Memory buffer pool implementation similar to jemalloc.</li>
|
||
<li><a href="http://objectlayout.org">ObjectLayout</a> - A
|
||
layout-optimized Java data structure package.</li>
|
||
<li><a href="https://github.com/snazy/ohc">ohc</a> - Java large off heap
|
||
cache developed for Apache Cassandra 3.0.</li>
|
||
<li><a href="https://github.com/square/okio">okio</a> - Modern Java IO
|
||
library that do clever things to save CPU and memory.</li>
|
||
<li><a href="https://github.com/onyx-platform/onyx-java">onyx-java</a> -
|
||
Mirrors the Onyx Platform core API by providing a Java equivalent for
|
||
each component of an Onyx workflow.</li>
|
||
<li><a href="https://parquet.apache.org/">parquet</a> - Columnar storage
|
||
format that uses the record shredding and assembly algorithm described
|
||
in the Dremel paper.</li>
|
||
<li><a
|
||
href="https://github.com/giltene/PauselessHashMap">PauselessHashMap</a>
|
||
- A java.util.HashMap compatible map that won’t stall puts or gets when
|
||
resizing.</li>
|
||
<li><a href="https://github.com/hrldcpr/pcollections">pcollections</a> -
|
||
A Persistent Java Collections Library.</li>
|
||
<li><a
|
||
href="https://developers.google.com/protocol-buffers">protobuf</a> -
|
||
Google’s data interchange format.</li>
|
||
<li><a href="http://www.paralleluniverse.co/quasar/">Quasar</a> -
|
||
Lightweight threads and actors for the JVM.</li>
|
||
<li><a href="https://github.com/davidmoten/rtree">rtree</a> - Immutable
|
||
in-memory R-tree and R*-tree implementations in Java with reactive
|
||
api.</li>
|
||
<li><a href="https://github.com/Sizmek/rtree2d">RTree2D</a> - RTree2D is
|
||
a 2D immutable R-tree with STR (Sort-Tile-Recursive) packing for
|
||
ultra-fast nearest and intersection queries on plane and spherical
|
||
surfaces.</li>
|
||
<li><a href="http://www.reactive-streams.org/">Reactive Streams</a> -
|
||
Standard for asynchronous stream processing with non-blocking back
|
||
pressure.</li>
|
||
<li><a
|
||
href="https://github.com/lightbend/reactive-streams-utils">Reactive
|
||
Streams Utilities</a> - Future standard utilities library for Reactive
|
||
Streams.</li>
|
||
<li><a
|
||
href="https://github.com/RoaringBitmap/RoaringBitmap">RoaringBitmap</a>
|
||
- A better compressed bitset in Java.</li>
|
||
<li><a
|
||
href="https://github.com/lemire/rollinghashjava">rollinghashjava</a> -
|
||
Rolling hash functions in Java.</li>
|
||
<li><a href="http://projectreactor.io/">Reactor</a> - Reactive data
|
||
applications on the JVM for Java, Groovy, Clojure and other.</li>
|
||
<li><a href="https://github.com/ReactiveX/RxJava">RxJava</a> - Library
|
||
for composing asynchronous and event-based programs using observable
|
||
sequences.</li>
|
||
<li><a href="https://github.com/OpenHFT/SmoothieMap">SmoothieMap</a> -
|
||
java.util.Map impl with worst put latencies more than 100 times smaller
|
||
than java.util.HashMap.</li>
|
||
<li><a
|
||
href="https://github.com/real-logic/simple-binary-encoding">Simple
|
||
Binary Encoding</a> - High Performance Message Codec.</li>
|
||
<li><a href="https://github.com/richardstartin/splitmap/">splitmap</a> -
|
||
A parallel bitmap implementation.</li>
|
||
<li><a href="https://datasketches.github.io/">DataSketches</a> - A Java
|
||
software library of stochastic streaming algorithms.</li>
|
||
<li><a href="https://github.com/chrisvest/stormpot">stormpot</a> - A
|
||
fast object pool for the JVM.</li>
|
||
<li><a href="https://github.com/addthis/stream-lib">stream-lib</a> - A
|
||
Java library for summarizing data in streams for which it is infeasible
|
||
to store all events.</li>
|
||
<li><a href="https://github.com/lemire/streamvbyte">streamvbyte</a> -
|
||
Fast integer compression in C using the StreamVByte codec.</li>
|
||
<li><a href="http://trane.io/">TraneIO</a> - High-performance
|
||
implementation of the Future abstraction.</li>
|
||
<li><a
|
||
href="https://github.com/cognitect-labs/transducers-java">transducers-java</a>
|
||
- Composable algorithmic transformations independent from the context of
|
||
their input and output sources.</li>
|
||
<li><a
|
||
href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/util/VarInt.java">VarInt</a>
|
||
- No-deps variable int implementation without deps (by Bazel).</li>
|
||
<li><a href="http://www.vavr.io/">vavr</a> - Functional Library for Java
|
||
8+.</li>
|
||
<li><a href="https://github.com/square/wire">wire</a> - Clean,
|
||
lightweight protocol buffers for Android and Java.</li>
|
||
<li><a
|
||
href="https://github.com/OpenHFT/Zero-Allocation-Hashing">Zero-Allocation-Hashing</a>
|
||
- Hashing any sequences of bytes in Java, including all kinds of
|
||
primitive arrays, buffers, CharSequences and more.</li>
|
||
</ul>
|
||
<h2 id="metaprogramming">Metaprogramming</h2>
|
||
<p><em>Parsers, interpreters, compilers and source generation targeted
|
||
for the JVM.</em></p>
|
||
<ul>
|
||
<li><a href="http://www.antlr.org/">Antlr</a> - Parser generator for
|
||
reading, processing, executing, or translating structured text or binary
|
||
files.</li>
|
||
<li><a href="https://github.com/google/auto">auto</a> - A collection of
|
||
source code generators for Java.</li>
|
||
<li><a href="http://calcite.apache.org/docs/">Apache Calcite</a> -
|
||
Dynamic data management framework and SQL parser plugin.</li>
|
||
<li><a href="http://types.cs.washington.edu/checker-framework/">Checker
|
||
Framework</a> - Compiler plug-ins that find bugs or verify their
|
||
absence.</li>
|
||
<li><a
|
||
href="https://github.com/google/compile-testing">compile-testing</a> -
|
||
Testing tools for javac and annotation processors.</li>
|
||
<li><a href="https://github.com/derive4j/derive4j">derive4j</a> -
|
||
Algebraic data types constructors, pattern-matching, morphisms, optics
|
||
and typeclasses.</li>
|
||
<li><a href="https://github.com/google/error-prone">error-prone</a> -
|
||
Catch common Java mistakes as compile-time errors.</li>
|
||
<li><a href="https://github.com/rahulmutt/ghcvm">GHCVM</a> - A Haskell
|
||
to JVM compiler that supports GHC Haskell.</li>
|
||
<li><a href="http://openjdk.java.net/projects/graal/">Graal</a> - New
|
||
experimental just-in-time compiler for Java that is integrated with the
|
||
HotSpot virtual machine.</li>
|
||
<li><a href="https://github.com/fge/grappa">grappa</a> - Java fork of
|
||
Parboiled. Write grammars with no preprocessing phase.</li>
|
||
<li><a href="http://immutables.github.io/">immutables</a> - Generate
|
||
simple, safe and consistent value objects.</li>
|
||
<li><a href="https://javacc.java.net/">javacc</a> - Parser generator for
|
||
use with Java.</li>
|
||
<li><a href="https://github.com/javaparser/javaparser">javaparser</a> -
|
||
Java 1.8 Parser and Abstract Syntax Tree for Java.</li>
|
||
<li><a href="https://github.com/square/javapoet">JavaPoet</a> - A Java
|
||
API for generating .java source files.</li>
|
||
<li><a href="https://github.com/jparsec/jparsec">jparsec</a> - Builds
|
||
mini parsers in pure Java a la Haskell Parsec.</li>
|
||
<li><a href="http://www.jsweet.org/">JSweet</a> - A transpiler from Java
|
||
to TypeScript/JavaScript.</li>
|
||
<li><a href="https://www.jetbrains.com/mps/">MPS</a> - Design and build
|
||
extensible DSLs and editors.</li>
|
||
<li><a href="https://projectlombok.org/">lombok</a> - Reduce the amount
|
||
of boilerplate code that is commonly written for Java classes.</li>
|
||
<li><a href="https://github.com/sirthias/parboiled">parboiled</a> -
|
||
Parsing of arbitrary input text based on parsing expression
|
||
grammars.</li>
|
||
<li><a href="https://github.com/graalvm/sulong">Sulong</a> - LLVM IR
|
||
interpreter written in Java using Truffle and Graal.</li>
|
||
<li><a href="https://github.com/konsoletyper/teavm">TeaVM</a> -
|
||
Ahead-of-time translating compiler (transpiler) from Java bytecode to
|
||
JavaScript.</li>
|
||
<li><a href="https://github.com/graalvm/truffle">Truffle</a> - Framework
|
||
for implementing languages as simple interpreters.</li>
|
||
<li><a href="https://eclipse.org/Xtext/">Xtext</a> - Framework for
|
||
development of programming languages and DSLs.</li>
|
||
</ul>
|
||
<h2 id="native">Native</h2>
|
||
<p><em>Interconnecting JVM and native code</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/fusesource/hawtjni">hawtjni</a> - A JNI
|
||
code generator based on the JNI generator used in Eclipse SWT.</li>
|
||
<li><a href="https://github.com/mikeakohn/java_grinder">Java Grinder</a>
|
||
- Compile Java bytecode to microcontroller assembly.</li>
|
||
<li><a href="https://github.com/eclipsesource/j2v8">j2v8</a> - Java API
|
||
for Google’s V8 JavaScript engine.</li>
|
||
<li><a href="https://github.com/bytedeco/javacpp">JavaCPP</a> - JavaCPP
|
||
provides efficient access to native C++ inside Java.</li>
|
||
<li><a href="https://github.com/jnr/jnr-ffi">jnr-ffi</a> - Load native
|
||
libraries without writing JNI code by hand.</li>
|
||
<li><a href="https://github.com/dvx/jssembly">jssembly</a> - Execution
|
||
of native assembly from Java.</li>
|
||
<li><a href="https://github.com/brettwooldridge/NuProcess">NuProcess</a>
|
||
- A low-overhead, non-blocking I/O, external Process execution
|
||
implementation for Java.</li>
|
||
<li><a href="http://openjdk.java.net/projects/panama/">Project
|
||
Panama</a> - Enriching the connections between the JVM and APIs used by
|
||
C programmers.</li>
|
||
</ul>
|
||
<h2 id="network">Network</h2>
|
||
<p><em>Tools for network programming, packet capture, monitoring,
|
||
testing and resiliency.</em></p>
|
||
<ul>
|
||
<li><a href="https://github.com/real-logic/Aeron">Aeron</a> - Efficient
|
||
reliable UDP unicast, UDP multicast, and IPC message transport.</li>
|
||
<li><a href="https://github.com/line/armeria">armeria</a> - Asynchronous
|
||
RPC/API client/server library built on top of Java 8, Netty 4.1, HTTP/2,
|
||
and Thrift.</li>
|
||
<li><a
|
||
href="https://github.com/OpenHFT/Chronicle-Network">Chronicle-Network</a>
|
||
- A High Performance Network library.</li>
|
||
<li><a href="https://github.com/tylertreat/comcast">comcast</a> -
|
||
Simulating shitty network connections.</li>
|
||
<li><a href="https://github.com/buger/gor">gor</a> - HTTP traffic replay
|
||
in real-time.</li>
|
||
<li><a href="http://www.grpc.io/">gRPC</a> - A high performance, open
|
||
source, general RPC framework that puts mobile and HTTP/2 first.</li>
|
||
<li><a href="https://github.com/LatencyUtils/jRT">jRT</a> - Measures
|
||
response time of a java application to socket-based requests.</li>
|
||
<li><a href="https://github.com/accelio/JXIO">JXIO</a> - Java API over
|
||
AccelIO (C library), a high-performance asynchronous reliable messaging
|
||
and RPC library optimized for hardware acceleration.</li>
|
||
<li><a href="https://github.com/k3po/k3po">K3PO</a> - Create arbitrary
|
||
network traffic and behavior to certify whether a network endpoint
|
||
behaves correctly.</li>
|
||
<li><a href="https://github.com/mefellows/muxy">muxy</a> - Simulating
|
||
real-world distributed system failures.</li>
|
||
<li><a href="http://netty.io/">Netty</a> - Async event-driven network
|
||
library for high performance protocol servers & clients.</li>
|
||
<li><a href="https://github.com/square/okhttp">okhttp</a> - An
|
||
HTTP+HTTP/2 client for Android and Java applications.</li>
|
||
<li><a href="https://github.com/odnoklassniki/one-nio">one-nio</a> -
|
||
library for building high performance Java servers.</li>
|
||
<li><a
|
||
href="https://github.com/netifi-proteus/proteus-java">proteus-java</a> -
|
||
Proteus Java Client based on RSocket.</li>
|
||
<li><a
|
||
href="https://github.com/salesforce/reactive-grpc">reactive-grpc</a> -
|
||
Reactive gRPC is a suite of libraries for using gRPC with Reactive
|
||
Streams programming libraries.</li>
|
||
<li><a href="http://rsocket.io/">RSocket</a> - RSocket is a binary
|
||
protocol for use on byte stream transports such as TCP, WebSockets, and
|
||
Aeron.</li>
|
||
<li><a href="https://github.com/Netflix/SimianArmy">SimianArmy</a> -
|
||
Resiliency tool that helps ensure that your applications can tolerate
|
||
random instance failures.</li>
|
||
<li><a href="https://github.com/kaitoy/pcap4j">pcap4j</a> - Java library
|
||
for capturing, crafting, and sending packets using libpcap.</li>
|
||
<li><a href="https://github.com/rafael-santiago/pig">pig</a> - A Linux
|
||
packet crafting tool.</li>
|
||
<li><a href="http://www.tcpdump.org/">tcpdump</a> - Packet analyzer for
|
||
network traffic capture.</li>
|
||
<li><a href="https://github.com/simsong/tcpflow">tcpflow</a> - Captures
|
||
TCP connections flows in a way that is convenient for protocol analysis
|
||
and debugging.</li>
|
||
<li><a href="https://github.com/appneta/tcpreplay">tcpreplay</a> - Pcap
|
||
editing and replay tools.</li>
|
||
</ul>
|
||
<h2 id="nix-tools">Nix tools</h2>
|
||
<p><em>Useful </em>nix tools when profiling the JVM and interaction with
|
||
the host environment<em> </em> <a
|
||
href="http://www.atoptool.nl/">atoptool</a> - Logging of system and
|
||
process activity for long-term analysis, highlighting overloaded system.
|
||
* <a href="https://github.com/iovisor/bcc">bcc</a> - Tools for BPF-based
|
||
Linux IO analysis, networking, monitoring, and more. * <a
|
||
href="http://www.brendangregg.com/flamegraphs.html">Flame Graphs</a> -
|
||
Visualization of profiled software, allowing the most frequent
|
||
code-paths to be identified quickly and accurately. * <a
|
||
href="https://github.com/koct9i/ioping">ioping</a> - Simple disk I/0
|
||
latency measuring tool. * <a
|
||
href="http://docs.oracle.com/javase/8/docs/technotes/tools/unix/javap.html">javap</a>
|
||
- Disassembles class files into code that reflects the java bytecode. *
|
||
<a
|
||
href="http://docs.oracle.com/javase/8/docs/technotes/tools/unix/jhat.html">jhat</a>
|
||
- Java Heap Analysis Tool * <a
|
||
href="https://docs.oracle.com/javase/9/tools/jhsdb.htm">jhsdb</a> -
|
||
Launch a postmortem debugger to analyze the content of a core-dump from
|
||
a crashed JVM. * <a
|
||
href="http://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html">jinfo</a>
|
||
- Prints configuration information for a given process. * <a
|
||
href="http://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html">jstack</a>
|
||
- Prints stack traces of threads for a given Java process. * <a
|
||
href="https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html">jstat</a>
|
||
- Monitors GC and compiler statistics in the JVM. * <a
|
||
href="http://linux.die.net/man/7/hwloc">hwloc</a> - Reports the
|
||
structure of the processor, number of cores, hyperthreads and cache
|
||
size. * <a href="https://github.com/RRZE-HPC/likwid">likwid</a> - Read
|
||
hardware performance counters on Intel and AMD processors. * <a
|
||
href="http://linux.die.net/man/8/numactl">numactl</a> - Control NUMA
|
||
policy for processes or shared memory. * <a
|
||
href="http://oprofile.sourceforge.net/news/">oprofile</a> - System-wide
|
||
hardware performance monitoring with easy-to-use interface at low
|
||
overhead. * <a
|
||
href="https://perf.wiki.kernel.org/index.php/Main_Page">perf</a> - Linux
|
||
profiling with performance counters. * <a
|
||
href="https://github.com/brendangregg/perf-tools">perf-tools</a> -
|
||
Performance analysis tools based on Linux perf_events (aka perf) and
|
||
ftrace. * <a href="http://www.sysdig.org/">sysdig</a> - Capture system
|
||
state and activity from a running Linux instance, then save, filter and
|
||
analyze. * <a
|
||
href="http://sebastien.godard.pagesperso-orange.fr">sysstat</a> -
|
||
Performance monitoring tools for Linux. * <a
|
||
href="https://www.glennklockwood.com/hpc-howtos/process-affinity.html">taskset/process-affinity</a>
|
||
- Retrieve or set a processes’s CPU affinity. * <a
|
||
href="http://tiptop.gforge.inria.fr/">tiptop</a> - Like top but also
|
||
shows instructions per cycle (IPC).</p>
|
||
<h2 id="profilers">Profilers</h2>
|
||
<p><em>Tools that provide profiling and tracing information to aid
|
||
program optimization</em></p>
|
||
<ul>
|
||
<li><a
|
||
href="https://github.com/google/allocation-instrumenter">allocation-instrumenter</a>
|
||
- Java agent that rewrites bytecode to instrument allocation sites.</li>
|
||
<li><a href="https://github.com/Devexperts/aprof">aprof</a> - Java
|
||
memory allocation profiler.</li>
|
||
<li><a
|
||
href="https://github.com/jvm-profiling-tools/async-profiler">async-profiler</a>
|
||
- Sampling CPU profiler for Java featuring AsyncGetCallTrace +
|
||
perf_events.</li>
|
||
<li><a href="https://github.com/jbachorik/btrace">BTrace</a> - a safe,
|
||
dynamic tracing tool for the Java platform.</li>
|
||
<li><a href="http://byteman.jboss.org/">Byteman</a> - tracing,
|
||
monitoring and testing tool for Java</li>
|
||
<li><a href="https://github.com/cl4es/bytestacks">bytestacks</a> - Turn
|
||
JVM bytecode execution into flame graphs.</li>
|
||
<li><a href="http://chrononsystems.com">Chronon</a> - Record your entire
|
||
java program. Replay on any machine.</li>
|
||
<li><a href="http://gceasy.io/">GCeasy</a> - Machine learning guided
|
||
Garbage collection log analysis tool. Auto-detect problems in the JVM GC
|
||
logs and recommend solutions to it.</li>
|
||
<li><a href="https://github.com/chewiebug/GCViewer">GCViewer</a> -
|
||
GCViewer is a tool that visualizes verbose GC output.</li>
|
||
<li><a href="https://github.com/epickrram/grav">grav</a> - A collection
|
||
of tools to help visualise process execution.</li>
|
||
<li><a href="https://github.com/jClarity/hawkshaw">hawkshaw</a> - Tools
|
||
for tracking down memory / JVM problems & generating
|
||
predictable-as-possible VM behaviour.</li>
|
||
<li><a
|
||
href="http://hdrhistogram.github.io/HdrHistogram/">HdrHistogram</a> - A
|
||
Histogram that supports recording and analyzing sampled data value
|
||
counts.</li>
|
||
<li><a
|
||
href="https://bitbucket.org/marshallpierce/hdrhistogram-metrics-reservoir">hdrhistogram-metrics-reservoir</a>
|
||
- A Metrics Reservoir implementation backed by HdrHistogram.</li>
|
||
<li><a
|
||
href="https://github.com/nitsanw/HdrLogProcessing">HdrLogProcessing</a>
|
||
- Utilities for HDR Histogram logs manipulation.</li>
|
||
<li><a href="https://github.com/mariusae/heapster">heapster</a> -
|
||
Production heap profiling for the JVM.</li>
|
||
<li><a
|
||
href="https://github.com/RichardWarburton/honest-profiler">honest-profiler</a>
|
||
- Sampling JVM profiler without the safepoint sample bias.</li>
|
||
<li><a href="https://github.com/jbellis/jamm">jamm</a> - Measure actual
|
||
object memory use including JVM overhead.</li>
|
||
<li><a
|
||
href="http://www.oracle.com/technetwork/java/javaseproducts/mission-control/java-mission-control-1998576.html">Java
|
||
Flight Recorder (JFR)</a> - Tool for collecting diagnostic and profiling
|
||
data about a running Java application with almost no performance
|
||
overhead.</li>
|
||
<li><a href="https://github.com/dweiss/java-sizeof">java-sizeof</a> -
|
||
Memory consumption estimator for Java.</li>
|
||
<li><a
|
||
href="http://openjdk.java.net/projects/code-tools/jcstress/">jcstress</a>
|
||
- Experimental harness and tests to aid the research in the correctness
|
||
of concurrency support in the JVM, class libraries, and hardware.</li>
|
||
<li><a
|
||
href="https://github.com/chrishantha/jfr-flame-graph">jfr-flame-graph</a>
|
||
- Converting JFR Method Profiling Samples to FlameGraph compatible
|
||
format.</li>
|
||
<li><a
|
||
href="https://github.com/lhotari/jfr-report-tool">jfr-report-tool</a> -
|
||
Tool for creating reports from Java Flight Recorder dumps.</li>
|
||
<li><a href="https://github.com/AdoptOpenJDK/jitwatch">jitwatch</a> -
|
||
Log analyser / visualiser for Java HotSpot JIT compiler.</li>
|
||
<li><a
|
||
href="https://github.com/yole/jitwatch-intellij">jitwatch-intellij</a> -
|
||
JITWatch plugin for IntelliJ IDEA.</li>
|
||
<li><a href="http://www.azul.com/jhiccup/">jHiccup</a> - jHiccup is an
|
||
open source tool designed to measure the pauses and stalls associated
|
||
with an application’s underlying Java runtime platform.</li>
|
||
<li><a href="http://openjdk.java.net/projects/code-tools/jmh/">jmh</a> -
|
||
Micro benchmarks written in Java and other languages targetting the
|
||
JVM.</li>
|
||
<li><a
|
||
href="https://github.com/akarnokd/jmh-compare-gui">jmh-compare-gui</a> -
|
||
GUI for comparing JMH results.</li>
|
||
<li><a href="http://openjdk.java.net/projects/code-tools/jol/">JOL</a> -
|
||
Analyze actual object layout schemes, footprint, and references in
|
||
JVMs.</li>
|
||
<li><a
|
||
href="https://www.ej-technologies.com/products/jprofiler/overview.html">JProfiler</a>
|
||
- Helps resolve performance bottlenecks, pin down memory leaks and
|
||
understand threading issues.</li>
|
||
<li><a
|
||
href="https://docs.oracle.com/javase/8/docs/technotes/guides/jvmti/">JVMTI</a>
|
||
- Provide a native API to inspect the state and to control the execution
|
||
of applications running in the JVM.</li>
|
||
<li><a href="https://github.com/patric-r/jvmtop">jvmtop</a> -
|
||
Lightweight console application to monitor running jvms on a machine in
|
||
top-like manner.</li>
|
||
<li><a
|
||
href="https://github.com/uber-common/jvm-profiler">jvm-profiler</a> -
|
||
Java Agent to collect various metrics and stacktraces for Hadoop/Spark
|
||
JVM processes in a distributed way.</li>
|
||
<li><a href="https://eclipse.org/mat/">MAT</a> - Java heap analyzer that
|
||
help find memory leaks and reduce memory consumption.</li>
|
||
<li><a href="https://github.com/square/leakcanary">leakcanary</a> - A
|
||
memory leak detection library for Android and Java.</li>
|
||
<li><a href="http://metrics.dropwizard.io/">metrics</a> - Measure the
|
||
behavior of critical components in production environment.</li>
|
||
<li><a
|
||
href="https://github.com/micrometer-metrics/micrometer">micrometer</a> -
|
||
An application metrics facade for the most popular monitoring
|
||
tools.</li>
|
||
<li><a href="https://osquery.io/">osquery</a> - osquery is an
|
||
instrumentation framework that expose the operating system as a
|
||
high-performance relational database.</li>
|
||
<li><a
|
||
href="http://www.peternier.com/projects/overseer/overseer.php">Overseer</a>
|
||
- Low-Level Hardware Monitoring and Management for Java.</li>
|
||
<li><a href="http://opentracing.io/">OpenTracing</a> - A vendor-neutral
|
||
open standard for distributed tracing.</li>
|
||
<li><a
|
||
href="https://github.com/jrudolph/perf-map-agent">perf-map-agent</a> -
|
||
Generate method mappings to use with the linux <code>perf</code>
|
||
tool.</li>
|
||
<li><a href="https://github.com/coderplay/perfj">perfj</a> - Linux perf
|
||
for java programs.</li>
|
||
<li><a href="https://github.com/Cue/polarbear">polarbear</a> - A tool to
|
||
help diagnose OutOfMemoryError conditions.</li>
|
||
<li><a href="https://github.com/riemann/riemann-jvm-profiler">Riemann
|
||
JVM Profiler</a> - JVM agent which sends function-level profiler
|
||
telemetry to a Riemann server for analysis, visualization, and
|
||
storage.</li>
|
||
<li><a
|
||
href="https://github.com/etsy/statsd-jvm-profiler">statsd-jvm-profiler</a>
|
||
- JVM agent profiler that sends profiling data to StatsD.</li>
|
||
<li><a href="https://github.com/aragozin/jvm-tools">Swiss Java Knife</a>
|
||
- Small set of tools for JVM troublshooting, monitoring and
|
||
profiling.</li>
|
||
<li><a href="https://www.takipi.com/">Takipi</a> - Tells you when and
|
||
why code breaks in production.</li>
|
||
<li><a href="https://github.com/zalando/tracer">Tracer</a> - Manages
|
||
custom trace identifiers and carries them through distributed
|
||
systems.</li>
|
||
<li><a href="https://www.yourkit.com/">YourKit</a> - Fully featured,
|
||
easy to use, low overhead profiler.</li>
|
||
<li><a href="https://github.com/openzipkin/zipkin">Zipkin</a> - A
|
||
distributed tracing system gather timing data for disparate services
|
||
developed by Twitter.</li>
|
||
</ul>
|
||
<h2 id="runtimes">Runtimes</h2>
|
||
<p><em>Tools for managing jvm runtime processes</em> * <a
|
||
href="https://github.com/puniverse/capsule">Capsule</a> - Dead-Simple
|
||
Packaging and Deployment for JVM Apps. * <a
|
||
href="http://www.crashub.org/">CRaSH</a> - The shell for the Java
|
||
Platform. * <a href="https://github.com/ninjudd/drip">Drip</a> - Fast
|
||
JVM launching without the hassle of persistent JVMs. * <a
|
||
href="https://github.com/HotswapProjects/HotswapAgent">HotswapAgent</a>
|
||
- Redefine classes at runtime and skip the redeploy process. * <a
|
||
href="https://github.com/airlift/jvmkill">jvmkill</a> - Agent that
|
||
forcibly terminates the JVM when it is unable to allocate memory or
|
||
create a thread. * <a
|
||
href="http://martiansoftware.com/nailgun/">Nailgun</a> - Nailgun is a
|
||
client, protocol, and server for running Java programs from the command
|
||
line without incurring the JVM startup overhead.</p>
|
||
<h2 id="virtual-machines">Virtual Machines</h2>
|
||
<p><em>Virtual machines that implement the JVM specification or parts of
|
||
it.</em> * <a href="https://github.com/ReadyTalk/avian">Avian</a> -
|
||
Lightweight highly portable JVM with an option for AOT compilation. * <a
|
||
href="https://source.android.com/devices/tech/dalvik/">Dalvik</a> -
|
||
Android runtime (ART) is the managed runtime used by applications and
|
||
some system services on Android. * <a
|
||
href="http://dcevm.github.io">DCEVM</a> - Modification of Java HotSwap
|
||
VM with unlimited support for reloading classes at runtime. * <a
|
||
href="http://openjdk.java.net/groups/hotspot/">HotSpot</a> - HotSpot
|
||
virtual machine maintained and distributed by Oracle Corporation. * <a
|
||
href="http://www.ibm.com/developerworks/java/jdk/">IBM J9</a> - JVM
|
||
developed by IBM. * <a href="https://github.com/eclipse/openj9">Eclipse
|
||
OpenJ9</a> - Eclipse OpenJ9. * <a
|
||
href="https://github.com/google/j2objc">J2ObjC</a> - Translator from
|
||
Java source to Objective-C code. Keeps shared code between iOS native
|
||
apps and Android native apps. * <a
|
||
href="https://github.com/zxh0/jvm.go">jvm.go</a> - A JVM written in Go.
|
||
* <a
|
||
href="https://github.com/codenameone/CodenameOne/tree/master/vm">ParparVM</a>
|
||
- An Open Source Java bytecode to C translator for iOS native
|
||
development. Designed as a part of the <a
|
||
href="https://www.codenameone.com/">Codename One</a> WORA for mobile
|
||
project. * <a href="https://github.com/MobiVM/robovm">MobiDevelop’s
|
||
RoboVM Fork</a> - Ahead of time compiler for JVM bytecode targeting iOS,
|
||
Mac OSX and Linux. * <a
|
||
href="https://www.azul.com/products/zing/">Zing</a> - The only JVM that
|
||
eliminates Java garbage collection pauses for large heap sizes. * <a
|
||
href="https://www.azul.com/products/zulu/">Zulu</a> - The only certified
|
||
multi-platform build of OpenJDK: Free, 100% open source Java.</p>
|
||
<h1 id="resources">Resources</h1>
|
||
<h2 id="documentation">Documentation</h2>
|
||
<p><em>Documentation related to JVM</em> * <a
|
||
href="http://www.brendangregg.com/blog/2018-03-22/tcp-tracepoints.html">TCP
|
||
Tracepoints</a> Linux bcc/BPF using tcplife by Brendan Gregg * <a
|
||
href="https://github.com/goldshtn/linux-tracing-workshop">Linux tracing
|
||
workshop</a> - JVM monitoring with BPF, examples and hands-on labs for
|
||
Linux tracing tools workshops. * <a
|
||
href="https://shipilev.net/jvm-anatomy-park/">JVM Anatomy Park</a> -
|
||
mini-post series where every post goes deep for only a single topic by
|
||
Aleksey Shipilёv. * <a
|
||
href="https://groups.google.com/forum/#!msg/mechanical-sympathy/icNZJejUHfE/BfDekfBEs_sJ">Coordinated
|
||
Omission problem</a> - Discussion on Mechanical Sympathy. * <a
|
||
href="http://mechanical-sympathy.blogspot.se/2011/07/false-sharing.html">False
|
||
sharing</a> - Threads impact the performance of each other while
|
||
modifying independent variables sharing the same cache line. Martin
|
||
Thompson. * <a
|
||
href="https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf">The JVM
|
||
specification</a> - The Java Virtual Machine Specification Java SE 8
|
||
Edition. * <a href="http://www.cs.umd.edu/~pugh/java/memoryModel/">The
|
||
Java Memory Model</a> - Starting point for discussions of and
|
||
information concerning the Java Memory Model. * <a
|
||
href="http://gee.cs.oswego.edu/dl/jmm/cookbook.html">The JSR-133
|
||
Cookbook for Compiler Writers</a> - Unofficial guide to implementing the
|
||
new Java Memory Model (JMM) specified by JSR-133. * <a
|
||
href="http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/">Garbage
|
||
Collection Tuning Guide</a> - HotSpot Virtual Machine Garbage Collection
|
||
Tuning Guide. * <a
|
||
href="http://psy-lob-saw.blogspot.se/2014/03/where-is-my-safepoint.html">Safepoints</a>
|
||
- Where is my safepoint? Nitsan Wakart. * <a
|
||
href="https://www.informatica.com/downloads/1568_high_perf_messaging_wp/Topics-in-High-Performance-Messaging.htm">Topics
|
||
in High-Performance Messaging</a> - Design decisions, experience and
|
||
constraints explained in high performance messaging systems. * <a
|
||
href="http://www.infoq.com/articles/top-10-performance-mistakes">Top 10
|
||
Performance Mistakes</a> - Digest of the top 10 performance related
|
||
mistakes Martin Thompson has seen in production. * <a
|
||
href="http://www.brendangregg.com/usemethod.html">The USE method</a> -
|
||
The Utilization Saturation and Errors (USE) Method is a methodology for
|
||
analyzing the performance of any system. Brendan Gregg. * <a
|
||
href="https://github.com/aphyr/distsys-class">An introduction to
|
||
distributed systems</a> - Kyle Kingsbury (author of Jepsen). * <a
|
||
href="http://gee.cs.oswego.edu/dl/html/j9mm.html">Using JDK 9 Memory
|
||
Order Modes</a> - For expert programmers familiar with Java concurrency,
|
||
but unfamiliar with the memory order modes available in JDK 9 provided
|
||
by VarHandles. * <a
|
||
href="http://www.brendangregg.com/blog/2017-05-09/cpu-utilization-is-wrong.html">CPU
|
||
Utilization is Wrong</a> - Measure instructions per cycle (IPC) for CPU
|
||
utilization. Brendan Gregg. * <a
|
||
href="http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html">Linux
|
||
Load Averages: Solving the Mystery</a> - Brendan Gregg. * <a
|
||
href="http://codecapsule.com/2014/02/12/coding-for-ssds-part-6-a-summary-what-every-programmer-should-know-about-solid-state-drives/">What
|
||
every programmer should know about solid-state drives</a> - Emmanuel
|
||
Goossaert. * <a
|
||
href="https://gist.github.com/djspiewak/464c11307cabc80171c90397d4ec34ef">Quick
|
||
Tips for Fast Code on the JVM</a> - Daniel Spiewak. ## Communities</p>
|
||
<p><em>Active discussions.</em></p>
|
||
<ul>
|
||
<li><a
|
||
href="http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest">concurrency-interest</a>
|
||
- Discussion list for JSR-166.</li>
|
||
<li><a
|
||
href="http://mail.openjdk.java.net/mailman/listinfo/hotspot-compiler-dev">hotspot-compiler-dev</a>
|
||
- Technical discussion about the development of the HotSpot bytecode
|
||
compilers.</li>
|
||
<li><a
|
||
href="http://mail.openjdk.java.net/mailman/listinfo/hotspot-dev">hotspot-dev</a>
|
||
- HotSpot development mailing list.</li>
|
||
<li><a
|
||
href="http://mail.openjdk.java.net/mailman/listinfo/hotspot-gc-dev">hotspot-gc-dev</a>
|
||
- Technical discussion about the development of the HotSpot garbage
|
||
collectors.</li>
|
||
<li><a
|
||
href="https://groups.google.com/forum/#!forum/mechanical-sympathy">mechanical-sympathy</a>
|
||
- Discussing how to code sympathetically to and measure the underlying
|
||
stack/platform so good performance can be extracted.</li>
|
||
<li><a
|
||
href="https://plus.google.com/u/0/communities/107178245817384004088/">Performance
|
||
Java User’s Group</a> - For expert Java <em>developers</em> who want to
|
||
push their systems to the next level</li>
|
||
<li><a href="http://vmmeetup.github.io/2017/">Virtual Machine Meetup
|
||
2017</a> - Venue for discussing the latest research and developments in
|
||
the area of managed language execution.</li>
|
||
</ul>
|
||
<h2 id="media">Media</h2>
|
||
<p><em>Videos, podcasts and other media related to JVMs</em> * <a
|
||
href="https://fosdem.org/2018/schedule/track/free_java/">FOSDEM 2018</a>
|
||
- FOSDEM 2018 Free Java devroom. * <a
|
||
href="https://www.youtube.com/playlist?list=PL2ekzZZrxVUkhrcMKuPMbiKoghc777plr">JFokus
|
||
2018</a> - The GC edition. Shenandoah, ZGC, Zing, Fibers, Falcon etc. *
|
||
<a href="http://nighthacking.com/g1-gc-with-kirk-pepperdine/">G1 Garbage
|
||
Collector in Java 8/9</a> - Kirk Pepperdine. * <a
|
||
href="https://youtu.be/7PkkxDaFDj8?list=PLKuh52zVrL6l6jzeSwNce77yLdfKmHAgD">Extreme
|
||
Profiling: Digging Into Hotspots</a> - Nitsan Wakart. * <a
|
||
href="http://www.infoq.com/presentations/java-vs-c-performance">Java
|
||
vs. C Performance</a> - Cliff Click. * <a
|
||
href="https://www.youtube.com/watch?v=LoyBTqkSkZk">Why JNI is slow?</a>
|
||
- Cliff Click * <a href="https://www.youtube.com/watch?v=OFgxAFdxYAQ">A
|
||
Crash Course in Modern Hardware</a> - Cliff Click * <a
|
||
href="https://www.youtube.com/watch?v=_6vJyciXkwo">Java Profiling from
|
||
the Ground Up</a> - Nitsan Wakart. * <a
|
||
href="https://www.youtube.com/watch?v=3g9R-RVIkOE">The Illusion of
|
||
Execution</a> - Nitsan Wakart. * <a
|
||
href="https://www.youtube.com/watch?v=MC1EKLQ2Wmg">Mythbusting Modern
|
||
Hardware to Gain ‘Mechanical Sympathy’</a> - Martin Thompson. * <a
|
||
href="https://www.youtube.com/watch?v=fDGWWpHlzvw">Designing for
|
||
Performance</a> - Martin Thompson. * <a
|
||
href="https://www.youtube.com/watch?v=lJ8ydIuPFeU">How NOT to Measure
|
||
Latency</a> - Gil Tene. * <a
|
||
href="http://openjdk.java.net/projects/mlvm/jvmlangsummit/">JVM Language
|
||
Summit 2015</a> - JVM Language Summit 2015. * <a
|
||
href="https://www.youtube.com/playlist?list=PLX8CzqL3ArzUY6rQAQTwI_jKvqJxrRrP_">JVM
|
||
Language Summit 2016</a> - JVM Language Summit 2016. * <a
|
||
href="https://www.youtube.com/playlist?list=PLX8CzqL3ArzXJ2EGftrmz4SzS6NRr6p2n">JVM
|
||
Language Summit 2017</a> - JVM Language Summit 2017. * <a
|
||
href="https://www.youtube.com/watch?v=vzzABBxo44g">Bits of advice for VM
|
||
writers</a> - Cliff Click. * <a
|
||
href="https://www.youtube.com/watch?v=_e5hujoTkgY">Understanding Java
|
||
garbage collection …</a> - Gil Tene. * <a
|
||
href="https://www.youtube.com/watch?v=bZuPTCaciLU">Faster Object
|
||
Arrays</a> - Gil Tene at GOTO Conferences. * <a
|
||
href="https://www.youtube.com/watch?v=TxqsKzxyySo">Java Memory Model
|
||
Pragmatics</a> - Aleksey Shipilev. * <a
|
||
href="https://www.youtube.com/watch?v=Y39kllzX1P8">With GC Solved, What
|
||
Else Makes a JVM Pause?</a> - John Cuthbertson. * <a
|
||
href="https://vimeo.com/120533011">JVM Mechanics</a> - Douglas Hawkins.
|
||
* <a href="https://www.youtube.com/watch?v=GsMs3n8CB6g">Give me 15
|
||
minutes and I’ll change your view of Linux tracing</a> - Brendan Gregg.
|
||
* <a
|
||
href="https://www.slideshare.net/brendangregg/kernel-recipes-2017-performance-analysis-with-bpf">Kernel
|
||
Recipes 2017: Performance Analysis with BPF</a> - Brendan Gregg. * <a
|
||
href="https://shipilev.net/talks/vmm-Sep2017-shenandoah.pdf">Shenandoah
|
||
deep talk</a> - Aleksey Shipilëv slightly-deeper-than-usual Shenandoah
|
||
talk from Virtual Machine Meetup 2017. * <a
|
||
href="https://www.youtube.com/watch?v=VCeHkcwfF9Q">Shenandoah: The
|
||
Garbage Collector That Could</a> - Aleksey Shipilev - Devoxx 2017/11 *
|
||
<a href="https://www.youtube.com/watch?v=k7IX_diKCEo">Analyzing and
|
||
Debugging the Java HotSpot VM at the OS Level</a> - Volker Simonis. * <a
|
||
href="http://www.cliffc.org/blog/2017/09/16/programming-and-performance-intro/">Cliff
|
||
Click podcast 2017/09/16</a> - Programming and Performance Intro. * <a
|
||
href="http://www.cliffc.org/blog/2017/09/16/of-bugs-and-coding-styles/">Cliff
|
||
Click podcast 2017/09/16</a> - Bugs and Coding Styles. * <a
|
||
href="http://www.cliffc.org/blog/2017/09/18/java-vs-cc-the-podcast/">Cliff
|
||
Click podcast 2017/09/18</a> - Java vs C/C++. * <a
|
||
href="http://www.cliffc.org/blog/2017/09/21/debugging-data-races/">Cliff
|
||
Click podcast 2017/09/21</a> - Debugging Data Races. * <a
|
||
href="http://www.cliffc.org/blog/2017/09/24/fast-bytecodes-for-funny-languages/">Cliff
|
||
Click podcast 2017/09/24</a> - Fast Bytecodes for Funny Languages. * <a
|
||
href="http://www.cliffc.org/blog/2017/09/28/struct-of-arrays-vs-array-of-structs/">Cliff
|
||
Click podcast 2017/09/28</a> - Struct of Arrays vs Array of Structs. *
|
||
<a
|
||
href="http://www.cliffc.org/blog/2017/10/04/the-3-hardest-problems-in-programming/">Cliff
|
||
Click podcast 2017/10/04</a> - The 3 Hardest Problems in Programming. *
|
||
<a
|
||
href="http://cliffc.org/blog/2017/11/05/modern-hardware-performance-cache-lines/">Cliff
|
||
Click podcast 2017/11/05</a> - Modern Hardware Performance and Cache
|
||
Lines. * <a
|
||
href="http://cliffc.org/blog/2017/11/09/queuing-in-practice/">Cliff
|
||
Click podcast 2017/11/09</a> - Queuing In Practice. * <a
|
||
href="https://www.quora.com/Which-technique-do-programming-language-parsers-and-interpreters-use/answer/Cliff-Click-1?srid=dZAx">Which
|
||
technique do programming language parsers and interpreters use?</a> -
|
||
Cliff Click. * <a href="https://vimeo.com/233820012">Everything about
|
||
Stack Traces and Heap Dumps</a> - Andrei Pangin. * <a
|
||
href="http://s.sashag.net/velny17-jvm">Fast and safe production
|
||
monitoring of JVM with BPF tools</a> - Sasha Goldshtein. * <a
|
||
href="https://www.youtube.com/watch?time_continue=1&v=xxWaa-lPR-8">The
|
||
Future of the Linux Page Cache</a> - Matthew Wilcox.</p>
|
||
<h2 id="people">People</h2>
|
||
<p><em>People that share hard-earned, often undocumented, knowledge and
|
||
data of the inner workings of the JVM</em> * <a
|
||
href="http://shipilev.net/">Aleksey Shipilëv</a> - Developing
|
||
Oracle/Open JDK/Hotspot and other Java-related technologies. * <a
|
||
href="https://twitter.com/abreslav">Andrey Breslav</a> - Lead Language
|
||
Designer of Kotlin @ JetBrains. * <a
|
||
href="https://twitter.com/BrianGoetz">Brian Goetz</a> - Java Language
|
||
Architect at Oracle. * <a href="https://twitter.com/benjchristensen">Ben
|
||
Christensen</a> - Facebook, Netflix, Apple engineering. * <a
|
||
href="http://www.brendangregg.com">Brendan Gregg</a> - Cloud
|
||
performance, kernel engineer, speaker, author. * <a
|
||
href="https://twitter.com/headius">Charles Nutter</a> - JRuby guy. * <a
|
||
href="https://twitter.com/cl4es">Claes Redestad</a> - Working with
|
||
OpenJDK stuff @ Oracle. * <a href="http://www.cliffc.org/blog/">Cliff
|
||
Click</a> - Creator of the HotSpot Server Compiler. * <a
|
||
href="https://blogs.oracle.com/dave/">Dave Dice</a> - Senior research
|
||
scientist in the Scalable Synchronization Research Group within Oracle.
|
||
* <a href="http://akarnokd.blogspot.se/">Dávid Karnok</a> - RxJava
|
||
committer that blogs about advanced RxJava. * <a
|
||
href="http://g.oswego.edu/">Doug Lea</a> - Author of the Java memory
|
||
model. * <a href="https://twitter.com/giltene">Gil Tene</a> - Azul
|
||
Systems. * <a href="https://twitter.com/heinzkabutz">Heinz Kabutz</a> -
|
||
Author of 250+ Java Specialists’ Newsletters. * <a
|
||
href="https://twitter.com/JohnWings">Ivan Krylov</a> - JVM expert. * <a
|
||
href="https://twitter.com/JakeWharton">Jake Wharton</a> - Square,
|
||
Google, open source hacker. * <a
|
||
href="https://blogs.oracle.com/jrose/">John Rose</a> - HotSpot
|
||
developer. * <a href="https://twitter.com/jboner">Jonas Bonér</a> -
|
||
Founder & CTO of Lightbend. * <a
|
||
href="https://twitter.com/lukaseder">Lukas Eder</a> - Blogger. Author of
|
||
JOOQ. * <a href="https://twitter.com/lagergren">Marcus Lagergren</a> -
|
||
Java language team alumnus. * <a
|
||
href="https://twitter.com/mreinhold">Mark Reinhold</a> - Chief
|
||
Architect, Java Platform Group, Oracle. * <a
|
||
href="http://mechanical-sympathy.blogspot.se/">Martin Thompson</a> -
|
||
Pasty faced performance gangster. * <a
|
||
href="https://twitter.com/karianna">Martijn Verburg</a> - Java Champion.
|
||
* <a href="https://twitter.com/javaperftuning">Kirk Pepperdine</a> -
|
||
Working in high performance and distributed computing for nearly 20
|
||
years. * <a
|
||
href="http://psy-lob-saw.blogspot.se/2014/03/where-is-my-safepoint.html">Nitsan
|
||
Wakart</a> - Azul Systems. * <a
|
||
href="https://twitter.com/normanmaurer">Norman Maurer</a> - Netty
|
||
developer. * <a href="https://twitter.com/contrarivariant">Paul
|
||
Phillips</a> - Forever undisputed SLOC Scala compiler dev. * <a
|
||
href="https://twitter.com/perliden">Per Liden</a> - Hacking on the
|
||
HotSpot JVM at Oracle. * <a href="https://twitter.com/PeterLawrey">Peter
|
||
Lawrey</a> - Innovative developer of high performance Java systems for
|
||
competitive advantage. * <a
|
||
href="https://twitter.com/rafaelcodes">Rafael Winterhalter</a> - Author
|
||
of ByteBuddy. * <a href="https://twitter.com/RichardWarburto">Richard
|
||
Warburton</a> - Developer, Speaker, Author. * <a
|
||
href="http://richardstartin.uk/">Richard Startin</a> - Performance
|
||
Analyst, developer, blogger. * <a
|
||
href="https://twitter.com/pressron">Ron Pressler</a> - Parallel
|
||
Universe. Leading Fibers and Continuations for the JVM. * <a
|
||
href="https://twitter.com/jodastephen">Stephen Colebourne</a> - Java
|
||
Champion. Occasional blogger and speaker. Best known for Joda projects
|
||
and JSR-310. * <a href="https://twitter.com/toddlmontgomery">Todd L.
|
||
Montgomery</a> - Ex-CTO, Ex-NASA researcher, network geek, messaging
|
||
middleware designer. * <a href="https://twitter.com/smaldini">Stéphane
|
||
Maldini</a> - Project Reactor Lead <span class="citation"
|
||
data-cites="Pivotal">@Pivotal</span>. * <a
|
||
href="https://twitter.com/stuartmarks">Stuart Marks</a> - Doctor
|
||
Deprecator. Java/JDK/OpenJDK developer * <a
|
||
href="https://twitter.com/iwan0www">Vladimir Ivanov</a> - hacking
|
||
HotSpot JVM @ Oracle. * <a href="https://twitter.com/viktorklang">Viktor
|
||
Klang</a> - Deputy CTO at Typesafe Inc.</p>
|
||
<h1 id="contributing">Contributing</h1>
|
||
<p>Contributions are very welcome!</p>
|
||
<p>Please have a look at <a
|
||
href="https://github.com/deephacks/awesome-jvm/blob/master/contributing.md">contributing.md</a>
|
||
for guidelines.</p>
|
||
<p><a href="https://github.com/deephacks/awesome-jvm">jvm.md
|
||
Github</a></p>
|