Awesome JVM
JVMを扱う資料や関連プロジェクトをまとめたAwesomeリストです。
バイトコード
バイトコード操作・解析ツール
- asmtools - Java .classファイルの生成に用いられるツールを開発するために使用される.
- Byte Buddy - コンパイラの助けなしに、実行時においてJavaクラスを生成するコード生成ライブラリ.
- Jitescript - BiteScriptに類似するバイトコード生成ライブラリ.
ガベージコレクター
JVM向けガベージコレクター
- Azul Pauseless Garbage Collection - Javaアプリケーションの継続的かつ中断のない動作を提供する.
- Balanced GC - IBM WebSphere Application Server V8におけるJava仮想マシンに搭載されたGCポリシー.
- Epsilon GC - 制限された割り当て量を持つ完全にパッシブなGC実装および可能な限り低い実行時パフォーマンスオーバーヘッド.
- G1 - Garbage-First Garbage Collector.
- Shenandoah - Ultra-Low-Pause-Time Garbage Collector.
- The Garbage Collection Handbook - ハードウェアおよびソフトウェアの最新の進展によって生じたガベージコレクションの新たな課題を扱う書籍.
- ZGC - 遅延が低く、非常に大きなヒープに対応したガベージコレクタを最適化したもの.
負荷生成ツール
協調欠落を避け、負荷生成と正確な測定を行うツール
言語
JVM上で動作する言語
- Ceylon - Red Hatが開発した、不可変性を強調した、オブジェクト指向、強型かつ静的であるプログラミング言語.
- Clojure - Rich Hickeyが開発したLispの方言。動的型であり、関数型プログラミングを強調している.
- Erjang - JVMベースのErlang仮想マシン.
- Eta - JVM上で純粋で、遅延評価であり、強型の関数型プログラミング言語.
- Frege - Haskellの精神に従った純粋関数型プログラミ及言語.
- gojava - Goパッケージ向けのJavaバインディング.
- Golo - JVM上で実行されるプログラミング言語または言語処理系です。
invokedynamic - Groovy - オプションで型付けされ、動的型である言語であり、静的型および静的コンパイル機能を備えている.
- Java - 一般用途、並列、強型、クラスベースのオブジェクト指向言語。
- JRuby - Ruby言語のJVM上の実装
- JPHP - PHPによるJavaVMの実装
- Jython - Javaプラットフォーム向けのPython
- Kawa - リスプファミリーのプログラミング言語であるスケム言語への拡張
- Kotlin - JVM、Androidおよびブラウザ向けの静的型プログラミング言語
- LuaJ - 標準Java機能を活かした、LuaVMのJava中心実装
- Nashorn - Javaで構築された、ネイティブJVMを用いた軽量かつ高性能なJavaScriptランタイム
- OCaml-Java - OCaml言語v4をサポート。純粋なJavaバイトコードを生成し、Javaとのシームレスな統合を実現
- Rembulan - Rembulanは、純粋Javaで書かれたJVM向けLua 5.3の実装であり、最小限の依存関係を持つ
- Renjin - 統計解析用のR言語のJVMベースインタプリタ
- Scala - オブジェクト指向と関数型プログラミングの思想を統合した強力かつ静的型のプログラミング言語
- Xtend - Javaにコンパイルされる、柔軟で表現力の高いJavaの方言
機械学習
- Deeplearning4j - オープンソース、分散型、JVM向けのディープラーニングライブラリ
- H2O - 高速な統計、機械学習および数学ランタイム
- Smile - 統計機械知能および学習エンジン
メモリ・並行処理
効率的なメモリ配置と並行アクセスのためのツール・データ構造
- Agera - GoogleによるAndroid向けの反応型プログラミング
- Agrona - ハイパフォーマンスアプリケーション開発においてよく必要なデータ構造とユーティリティメソッドを備えたライブラリ
- Apache Arrow - 列挙型メモリ内分析向けのハイパフォーマンスなクロスシステムデータレイヤー
- bloofi - 多次元BloomフィルタのJava実装
- Cap’n Proto - 驚異的に高速なデータ交換フォーマットおよびベースドキャパシティのRPCシステム
- caffeine - Java 8向けの高性能キャッシュライブラリ
- Chronicle-Bytes - 低レベルのメモリアクセスをラップするライブラリ
- Chronicle-Queue - マイクロ秒メッセージングですべてをディスクに保存
- Chronicle-Map - 低遅延および/またはマルチプロセスアプリケーション向けのメモリ内キー値ストア
- clj-ds - Clojureのデータ構造をClojure以外での使用に適応した構造
- colfer - バイナリシリアライゼーションフォーマットとクラス生成器
- commons-math - 軽量で自立した数学および統計コンポーネントのライブラリ
- CuckooFilter4J - 近似集合メンバークエリ用のBloomフィルタの代替
- cyclops - RxJava、Reactor、FunctionalJava、GuavaおよびJavaslangとの統合モジュール
- Eclipse Collections - Java向けのコレクションフレームワーク
- externalsortinginjava - 複数コアと外部メモリアルゴリズムを使って非常に大きなファイルをソート
- failsafe - 軽量で依存関係のない、失敗処理を行うためのライブラリ
- fasttuple - オン・ヘッドおよびオフ・ヘッドメモリにおいて隣接して配置されたコレクション
- fast-uuid - UUIDを迅速かつ効率的にパースおよび書き出しできるJavaライブラリ
- FlatBuffers - C++、C#、Go、Java、JavaScript、PHP、Python向けの効率的なクロスプラットフォームシリアライゼーションライブラリ
- geohash - 地理ハッシュ処理用のJavaユーティリティメソッド
- gs-collections - ゴールドマン・サックスのコレクションフレームワーク
- hollow - 小規模から中規模のメモリ内データセットを効果的に扱うためのJavaライブラリと包括的なツールセット
- high-scale-lib - Cliff Clickのハイスケールライブラリ
- hppc - 高性能プリミティブコレクション
- injector - Java 用の新しい Executor です。
- java-concurrent-hash-trie-map - Scala collections から導入された並列 Trie ハッシュマップの Java ポートです。
- java-hll - HyperLogLog アルゴリズム用の Java ライブラリです。
- JavaFastPFOR - 整数の配列を非常に高速に圧縮および展開できるライブラリです。
- java-string-similarity - 文字列の類似性および距離測定、Levenshtein エディット距離やシブリンズ、Jaro-Winkler、最長共通部分列、コサイン類似性なども含みます。
- JCTools - JDK にまだ含まれていない並列データ構造です。
- DSL-JSON - 高度なコンパイル時データバインディングを備えた高性能 JSON ライブラリです。
- jsoniter - DLS-JSON のコピーとして、世界で最も速い JSON パーサーと主張しています。
- jOOL - Java 8 ラムダのための便利な拡張機能です。
- Koloboke - Java コレクションがメモリとパフォーマンスの最後のbreadcrumbまでをカバーしています。
- LevelDB - LevelDB の Java でのリライト(ポート)です。
- lightweight_trie - 非常にメモリ効率の高い Trie(ラディックスツリー)の実装です。
- lmdbjni - Cで書かれた超高速かつ超コンパクトなキー値埋め込みデータストア LMDB への Java API(HawtJNI)です。
- lmdbjava - Cで書かれた超高速かつ超コンパクトなキー値埋め込みデータストア LMDB への Java API(JNR)です。
- low-gc-membuffers - GCオーバヘッドを最小限に抑えるために、Direct ByteBuffers を使用するメモリ内円環バッファです。
- lwjgl3 - グラフィックス(OpenGL)、音声(OpenAL)、並列計算(OpenCL)アプリケーション開発に必要なネイティブAPIへのクロスプラットフォームアクセスを可能にするJavaライブラリです。
- MapDB - オフヒープまたはディスク上にストレージをバックアップするコレクションです。
- mph-table - 最小完全ハッシュテーブルは、効率的なスペース利用と高速読み取りを備えた不変のキー/値ストアです。
- mug - Google から生まれた、小さなゼロデプの関数ユーティリティライブラリです。
- netty-buffers - jemalloc に類似したメモリバッファプールの実装です。
- ObjectLayout - レイアウト最適化されたJavaデータ構造パッケージ
- ohc - Apache Cassandra 3.0向けに開発されたJavaの大規模オフヒープキャッシュ
- okio - CPUおよびメモリを節約するために巧妙な処理を行う現代的なJava IOライブラリ
- onyx-java - OnyxプラットフォームのコアAPIをJavaに相当する形で再現することで、Onyxワークフローの各コンポーネントを対応
- parquet - Dremel論文に記載されたレコードの分解および組み立てアルゴリズムを使用するカラム型ストレージ形式
- PauselessHashMap - java.util.HashMapと互換性のあるマップで、リサイズ時にputやgetがストールされない
- pcollections - 永続的なJavaコレクションライブラリ
- protobuf - Googleのデータ交換フォーマット
- Quasar - JVM向けの軽量スレッドとアクター
- rtree - Javaにおける反応性APIを備えた不変のメモリR-ツリーおよびR*-ツリーの実装
- RTree2D - RTree2Dは、平面および球面表面における最近傍および交差クエリを極めて高速に実行するためにSTR(Sort-Tile-Recursive)パッキングを用いた2次元不変R-ツリー
- Reactive Streams - 非ブロッキングバックプレスを用いたアシンコントストリーム処理の標準
- Reactive Streams Utilities - Reactive Streams向けの未来の標準ユーティリティライブラリ
- RoaringBitmap - Javaにおけるより効率的なビットセットの圧縮
- rollinghashjava - Javaにおけるローリングハッシュ関数
- Reactor - Java、Groovy、ClojureなどでのJVM上で反応性データアプリケーション
- RxJava - 可観測シーケンスを使用して、非同期およびイベントベースのプログラムを構成するためのライブラリ
- SmoothieMap - java.util.Mapの実装で、putの最悪遅延がjava.util.HashMapよりも100倍以上小さい
- Simple Binary Encoding - 高性能メッセージコーディング
- splitmap - 並列ビットマップの実装
- DataSketches - スタチカルなストリーミングアルゴリズムを扱うJavaソフトウェアライブラリ
- stormpot - JVM用の高速オブジェクトプール
- stream-lib - すべてのイベントを保存できないストリームデータの要約に用いるJavaライブラリ
- streamvbyte - StreamVByteコーデックを用いたCでの高速整数圧縮
- TraneIO - Future抽象の高パフォーマンス実装
- transducers-java - 入出力ソースのコンテキストに依存しない、合成可能なアルゴリズム変換
- VarInt - 依存関係なしの変動整数実装(Bazelによる)
- vavr - Java 8以降向けの関数型ライブラリ
- wire - AndroidおよびJava向けのシンプルで軽量なプロトコルバッファーズ
- Zero-Allocation-Hashing - Javaで任意のバイト列をハッシュ化、プリミティブ配列、バッファ、CharSequenceなどすべてを含む
メタプログラミング
JVM向けパーサー、インタープリター、コンパイラー、ソース生成
- Antlr - 構造化テキストまたはバイナリファイルの読み取り、処理、実行、または変換を行うパーサー生成器
- auto - Java向けのソースコード生成器のコレクション
- Apache Calcite - 動的データ管理フレームワークおよびSQLパーサープラグイン
- Checker Framework - バグの検出またはその存在の確認を行うコンパイラプラグイン
- compile-testing - javacおよびアノテーションプロセッサ向けのテストツール
- derive4j - 代数データ型のコンストラクタ、パターンマッチング、モルフィズム、オプティクスおよびタイプクラス
- error-prone - 一般的なJavaのミスをコンパイル時エラーとして検出
- GHCVM - GHC HaskellをサポートするHaskellからJVMへのコンパイラ
- Graal - HotSpot仮想マシンと統合された、新しい実験的なJava用の即時コンパイラ
- grappa - ParboiledのJava版。プリプロセッシングフェーズなしで文法を書く
- immutables - シンプルで安全かつ一貫した値オブジェクトを生成する
- javacc - Java で使用するパーサー生成器
- javaparser - Java 1.8 のパーサーおよび抽象構文木
- JavaPoet - .java ソースファイルを生成する Java API
- jparsec - Haskell Parsec に似た純粋 Java によるミニパーサーの構築
- JSweet - Java から TypeScript/JavaScript へのトランスパイラ
- MPS - 拡張可能な DSL およびエディタの設計と開発
- lombok - Java クラスに通常書かれるボイラープレートコードの量を減らす
- parboiled - パーサリング表現文法に基づく任意の入力テキストのパース
- Sulong - Truffle と Graal を使って Java で書かれた LLVM IR インタプリタ
- TeaVM - Java バイトコードから JavaScript への事前翻訳コンパイラ(トランスパイラ)
- Truffle - 言語をシンプルなインタプリタとして実装するためのフレームワーク
- Xtext - プログラミング言語および DSL の開発用フレームワーク
ネイティブ連携
Interconnecting JVM and native code
- hawtjni - Eclipse SWT に使われる JNI 生成器を基にした JNI コード生成器
- Java Grinder - Java バイトコードをマイクロコントローラアセンブリにコンパイル
- j2v8 - Google の V8 JavaScript エンジン用の Java API
- JavaCPP - JavaCPP は Java 内のネイティブ C++ への効率的なアクセスを提供
- jnr-ffi - 手動で JNI コードを書かずにネイティブライブラリをロード
- jssembly - Java からネイティブアセンブリの実行
- NuProcess - Java 用の低オーバーヘッドかつブロッキングなしの I/O および外部プロセスの実行実装
- Project Panama - JVMとCプログラマが使うAPIの間の接続を強化する。
ネットワーク
ネットワークプログラミング、パケット取得、監視、試験、耐障害性のツール
- Aeron - 効率的かつ信頼性の高いUDPユニキャスト、UDPマルチキャスト、およびIPCメッセージの転送。
- armeria - Java 8、Netty 4.1、HTTP/2、Thriftに基づく非同期RPC/APIクライアント・サーバーライブラリ。
- Chronicle-Network - 高パフォーマンスネットワークライブラリ。
- comcast - 悪質なネットワーク接続をシミュレーションする。
- gor - リアルタイムでのHTTPトラフィックの再現。
- gRPC - モバイルおよびHTTP/2を最優先にした、高パフォーマンスでオープンソースの一般RPCフレームワーク。
- jRT - Javaアプリケーションがソケットベースのリクエストに対して返答時間を測定する。
- JXIO - AccelIO(Cライブラリ)上のJava API、ハードウェアアクセラレーションに最適化された高パフォーマンス非同期信頼性メッセージおよびRPCライブラリ。
- K3PO - 任意のネットワークトラフィックおよび行動を作成し、ネットワークエンドポイントが正しく動作しているかを検証する。
- muxy - 現実世界の分散システムの障害をシミュレーションする。
- Netty - 高パフォーマンスプロトコルサーバーおよびクライアント向けの非同期イベント駆動ネットワークライブラリ。
- okhttp - AndroidおよびJavaアプリケーション向けのHTTP+HTTP/2クライアント。
- one-nio - 高パフォーマンスJavaサーバーを構築するためのライブラリ。
- proteus-java - RSocketに基づくProteus Javaクライアント。
- reactive-grpc - Reactive gRPCは、Reactive StreamsプログラミングライブラリとgRPCを使用するためのライブラリセット。
- RSocket - RSocketは、TCP、WebSockets、Aeronなどのバイトストリームトランスポートで使用できるバイナリプロトコル。
- SimianArmy - アプリケーションがランダムなインスタンス障害を耐えられるようにするためのリシリエンスツール。
- pcap4j - libpcapを使用してパケットをキャプチャし、作成し、送信するためのJavaライブラリ。
- pig - Linuxのパケット作成ツール。
- tcpdump - ネットワークトラフィックのキャプチャに用いるパケット分析ツール
- tcpflow - プロトコル分析やデバッグに便利なTCP接続フローのキャプチャ
- tcpreplay - Pcapの編集および再実行ツール
Nixツール
*Useful nix tools when profiling the JVM and interaction with the host environment
- atoptool - システムおよびプロセス活動のログ記録による長期分析、システム過負荷を強調
- bcc - BPFに基づくLinuxのIO分析、ネットワーク、モニタリングなどに関するツール
- Flame Graphs - プロファイルされたソフトウェアの可視化により、頻度の高いコードパスを迅速かつ正確に特定
- ioping - シンプルなディスクI/O遅延測定ツール
- javap - クラスファイルをJavaバイトコードに反映するコードに分解
- jhat - Javaヒープ分析ツール
- jhsdb - クラッシュしたJVMからのコアダンプの内容を分析するポストマートデバッガを起動
- jinfo - 指定プロセスの設定情報を表示
- jstack - 指定Javaプロセスのスレッドのスタックトレースを表示
- jstat - JVM内のGCおよびコンパイラ統計をモニタリング
- hwloc - プロセッサの構造、コア数、ハイパースレッド数およびキャッシュサイズの構成を報告
- likwid - IntelおよびAMDプロセッサのハードウェアパフォーマンスカウンタを読み取る
- numactl - プロセスまたは共有メモリに対するNUMAポリシーを制御
- oprofile - 低負荷で利用しやすいインターフェースを備えたシステム全体のハードウェアパフォーマンスモニタリング
- perf - Linuxでのパフォーマンスカウンタによるプロファイリング
- perf-tools - Linux perf_events(aka perf)およびftraceに基づくパフォーマンス分析ツール
- sysdig - 実行中のLinuxインスタンスからシステム状態および活動をキャプチャし、保存、フィルタリング、分析
- sysstat - Linux向けパフォーマンスモニタリングツール
- taskset/process-affinity - プロセスのCPU親和性を取得または設定
- tiptop - topに似ているが、サイクルあたりの命令数(IPC)も表示
プロファイラー
最適化に役立つプロファイル・トレース情報を提供するツール
- allocation-instrumenter - Javaアグエントでバイトコードをリライトしてメモリ割り当て場所をインストルメント化
- aprof - Javaメモリ割り当てプロファイラー
- async-profiler - AsyncGetCallTrace + perf_eventsを備えたJava用サンプリングCPUプロファイラー
- BTrace - Javaプラットフォーム向け安全かつ動的トレースツール
- Byteman - Java向けトレース、モニタリング、テストツール
- bytestacks - JVMのバイトコード実行をフレームグラフに変換
- Chronon - あなたのすべてのJavaプログラムを記録し、任意のマシン上で再実行
- GCeasy - 機械学習を用いたガベージコレクションログ分析ツール。JVMのGCログに問題を自動検出し、解決策を提案
- GCViewer - GCViewerはverbose GC出力の可視化を行うツール
- grav - プロセス実行の可視化を支援するツールのコレクション
- hawkshaw - メモリやJVM問題の特定と、予測可能なVM動作の生成に役立つツール
- HdrHistogram - サンプルデータ値の記録と分析をサポートするヒストグラム
- hdrhistogram-metrics-reservoir - HdrHistogramに基づくメトリクスリザーブの実装
- HdrLogProcessing - HDRヒストグラムログの操作用ユーティリティ
- heapster - JVM向けプロダクション用ヒーププロファイリング
- honest-profiler - 安全ポイントサンプリングバイアスのないJVMプロファイラー
- jamm - 実際のオブジェクトメモリ使用量(JVMオーバヘッドを含む)を測定
- Java Flight Recorder (JFR) - Javaアプリケーションの実行中に収集する診断およびプロファイリングデータをほぼ性能負荷なしで取得するツール
- java-sizeof - Javaのメモリ消費量を推定するツール
- jcstress - JVM、クラスライブラリ、ハードウェアにおける並列処理サポートの正確性に関する研究を支援する実験的なハーネスとテスト
- jfr-flame-graph - JFRメソッドプロファイリングサンプルをFlameGraph形式に変換するツール
- jfr-report-tool - Java Flight Recorderのダンプからレポートを作成するツール
- jitwatch - Java HotSpot JITコンパイラのログを分析・可視化するツール
- jitwatch-intellij - IntelliJ IDEA用のJITWatchプラグイン
- jHiccup - jHiccupは、アプリケーションの下位Javaランタイムプラットフォームに関連する遅延と停止を測定するオープンソースツール
- jmh - Javaおよびその他の言語で書かれたマイクロベンチマークはJVMをターゲットとしている
- jmh-compare-gui - JMH結果を比較するためのGUI
- JOL - JVMにおける実際のオブジェクトレイアウトスキーム、フッツプリント、参照を分析するツール
- JProfiler - パフォーマンスボトルネックの解決、メモリリークの特定、スレッド問題の理解を支援するツール
- JVMTI - JVMで実行中のアプリケーションの状態を確認し、実行を制御するためのネイティブAPIを提供するツール
- jvmtop - 機械のトップのような表示で、実行中のjvmをモニタリングする軽量コンソールアプリケーション
- jvm-profiler - Hadoop/Spark JVMプロセスの分散方式で、さまざまなメトリクスとスタックトレースを収集するJavaアグエント
- MAT - メモリリークの検出とメモリ消費量の削減を支援するJavaヒープアナライザ
- leakcanary - AndroidおよびJava向けのメモリリーク検出ライブラリ
- metrics - 生産環境における重要なコンポーネントの動作を測定するツール
- micrometer - 最も人気のある監視ツール向けのアプリケーションメトリクスのファサード
- osquery - osqueryは、オペレーティングシステムを高性能の関係データベースとして公開するインストルメンテーションフレームワーク
- Overseer - Java向けの低レベルハードウェアモニタリングと管理
- OpenTracing - 分散トレース用のベンダー中立のオープンスタンダード
- perf-map-agent - JVMプログラムのCPU、メモリ、割当、ロック、トレース情報を収集・分析します。
perf - perfj - Linux perf による Java プログラムの使用
- polarbear - OutOfMemoryError の発生原因を診断するツール
- Riemann JVM Profiler - Riemannサーバーに機能レベルプロファイリングのテレメトリを送信するJVMエージェント
- statsd-jvm-profiler - StatsDにプロファイリングデータを送信するJVMエージェント
- Swiss Java Knife - JVMトラブルシューティング、モニタリング、プロファイリングに必要なツールセット
- Takipi - プロダクション環境でコードが破損するタイミングと原因を教えてくれる
- Tracer - カスタムトレースIDを管理し、分散システムを通過させる
- YourKit - 機能が豊富で使いやすく、オーバーヘッドが少ないプロファイラー
- Zipkin - Twitterが開発した複数サービスのタイミングデータを収集する分散トレースシステム
ランタイム管理
JVMランタイムプロセスを管理するツール
- Capsule - JVMアプリケーション向けのシンプルなパッケージングとデプロイ
- CRaSH - Javaプラットフォームのシェル
- Drip - パーソナライズされたJVMの起動を可能にし、持続的なJVMの負担を回避
- HotswapAgent - 実行時におけるクラスの再定義を行い、再デプロイプロセスをスキップ
- jvmkill - メモリ割り当てやスレッド作成が不可能になった場合にJVMを強制終了するエージェント
- Nailgun - Nailgunは、コマンドラインからJavaプログラムを実行するためのクライアント、プロトコル、サーバー
仮想マシン
JVM仕様またはその一部を実装する仮想マシン
- Avian - AOTコンパイルのオプションを備えた軽量かつ高移植性のJVM
- Dalvik - Androidアプリケーションおよび一部のシステムサービスで使用されるマネージドランタイム(ART)
- DCEVM - Java HotSwap VMの改良により、実行時におけるクラスの再読み込みを無制限にサポート
- HotSpot - Oracle Corporationが維持・配布するHotSpot仮想マシン
- IBM J9 - IBMが開発したJVM
- Eclipse OpenJ9 - Eclipse OpenJ9
- J2ObjC - JavaソースコードからObjective-Cコードへの翻訳ツール。iOSネイティブアプリとAndroidネイティブアプリの間の共有コードを維持する
- jvm.go - Goで書かれたJVM
- ParparVM - JVM仕様またはその一部を実装する仮想マシンです。 Codename One
- MobiDevelop’s RoboVM Fork - iOS、Mac OSXおよびLinux向けのJVMバイナリコード用の事前コンパイラ
- Zing - 大規模ヒープサイズにおいてJavaのガベージコレクションの停止を完全に除去する唯一のJVM
- Zulu - OpenJDKの唯一の認定マルチプラットフォームビルド:無料、100%オープンソースJava
資料
ドキュメント
JVM関連ドキュメント
- TCP Tracepoints Linux bcc/BPF using tcplife by Brendan Gregg
- Linux tracing workshop - BPFによるJVM監視、Linuxトレースツールワークショップ用の例と実践実験
- JVM Anatomy Park - Aleksey Shipilёvによるミニポストシリーズ。各ポストは1つのテーマに深く掘り下げたもの。
- Coordinated Omission problem - Mechanical Sympathyに関するディスカッション
- False sharing - スレッドが、同じキャッシュラインを共有する独立した変数を変更する際に互いのパフォーマンスに影響を与える。Martin Thompson
- The JVM specification - JVM仕様、バイトコード、メモリ、性能に関する技術文書です。 Java SE 8版のJVM仕様です。
- The Java Memory Model - Javaメモリモデルに関する議論の出発点および情報の提供。
- The JSR-133 Cookbook for Compiler Writers - JSR-1、33で指定された新しいJavaメモリモデル(JMM)を実装するための非公式ガイド
- Garbage Collection Tuning Guide - HotSpot仮想マシンのガベージコレクションチューニングガイド
- Safepoints - 私のセーフポイントはどこにあるのか?Nitsan Wakart
- Topics in High-Performance Messaging - 高性能メッセージングシステムにおける設計決定、経験、制約の説明
- Top 10 Performance Mistakes - Martin Thompsonが生産環境で見たトップ10のパフォーマンス関連ミスの要約
- The USE method - Utilization Saturation and Errors (USE)メソッドは、いかなるシステムのパフォーマンスを分析するための手法である。Brendan Gregg
- An introduction to distributed systems - Kyle Kingsbury(Jepsenの著者)
- Using JDK 9 Memory Order Modes - Javaコンカレントに詳しい専門プログラマー向けに、JDK 9で提供されたVarHandlesによるメモリオーダーモードについて。
- CPU Utilization is Wrong - CPU利用率のためのサイクルあたりのインストラクション数(IPC)を測定。Brendan Gregg。
- Linux Load Averages: Solving the Mystery - ブレンダン・グリッグ
- What every programmer should know about solid-state drives - Emmanuel Goossaert。
- Quick Tips for Fast Code on the JVM - Daniel Spiewak。
コミュニティ
活発な議論の場
- concurrency-interest - JSR-166のディスカッションリスト。
- hotspot-compiler-dev - HotSpotバイトコードコンパイラの開発を扱う技術的な議論。
- hotspot-dev - HotSpot開発メールリスト。
- hotspot-gc-dev - HotSpotガベージコレクタの開発を扱う技術的な議論。
- mechanical-sympathy - 根本的なスタック/プラットフォームに配慮したコードの書き方と、その測定方法についてのディスカッション。
- Performance Java User’s Group - 専門的なJava開発者がシステムを次のレベルに引き上げたい場合向け。
- Virtual Machine Meetup 2017 - 管理言語実行に関する最新の研究および開発についてのディスカッションの場。
メディア
JVM関連の動画、ポッドキャスト等
- FOSDEM 2018 - FOSDEM 2018 フリージャバ開発ルーム。
- JFokus 2018 - GCエディション。シェナンドア、ZGC、ZING、フィバーズ、ファルコンなど。
- G1 Garbage Collector in Java 8/9 - Kirk Pepperdine。
- Extreme Profiling: Digging Into Hotspots - ニツァン・ワカート
- Java vs. C Performance - Cliff ClickによるJavaとCの性能比較講演
- Why JNI is slow? - Cliff ClickによるJNIの性能解説
- A Crash Course in Modern Hardware - Cliff Clickによる現代ハードウェアの集中講義
- Java Profiling from the Ground Up - ニツァン・ワカート
- The Illusion of Execution - ニツァン・ワカート
- Mythbusting Modern Hardware to Gain ‘Mechanical Sympathy’ - マーティン・スミス
- Designing for Performance - マーティン・スミス
- How NOT to Measure Latency - ギル・テネ
- JVM Language Summit 2015 - JVM言語サミット2015
- JVM Language Summit 2016 - JVM言語サミット2016
- JVM Language Summit 2017 - JVM言語サミット2017
- Bits of advice for VM writers - Cliff ClickによるVM実装者向けの助言
- Understanding Java garbage collection … - ギル・テネ
- Faster Object Arrays - ギル・テネがGOTOコンファレンスで
- Java Memory Model Pragmatics - アレクセイ・シピレフ
- With GC Solved, What Else Makes a JVM Pause? - ジョン・カスバートソン
- JVM Mechanics - ダグラス・ハイワーカス
- Give me 15 minutes and I’ll change your view of Linux tracing - ブレンダン・グリッグ
- Kernel Recipes 2017: Performance Analysis with BPF - ブレンダン・グリッグ
- Shenandoah deep talk - アレクセイ・シピレフがVirtual Machine Meetup 2017で行った、やや深めのシェナウッド講演
- Shenandoah: The Garbage Collector That Could - アレクセイ・シピレフ - Devoxx 2017/11
- Analyzing and Debugging the Java HotSpot VM at the OS Level - フォルカー・シモンス
- Cliff Click podcast 2017/09/16 - プログラミングとパフォーマンスの紹介
- Cliff Click podcast 2017/09/16 - バグとコーディングスタイル
- Cliff Click podcast 2017/09/18 - Java と C/C++ の違い
- Cliff Click podcast 2017/09/21 - データレースのデバッグ
- Cliff Click podcast 2017/09/24 - 面白い言語向けの高速バイトコード
- Cliff Click podcast 2017/09/28 - 構造体の配列と配列の構造体
- Cliff Click podcast 2017/10/04 - プログラミングにおける3つの難しい問題
- Cliff Click podcast 2017/11/05 - 現代のハードウェア性能とキャッシュライン
- Cliff Click podcast 2017/11/09 - 実際のキューの設計
- 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
人物
JVM内部の実践的で文書化されにくい知識・データを共有する人物
- Aleksey Shipilëv - Oracle/Open JDK/Hotspot およびその他の Java 関連技術の開発
- Andrey Breslav - JetBrains における Kotlin のリード言語設計者
- Brian Goetz - Oracle における Java 言語アーキテクト
- Ben Christensen - Facebook、Netflix、Apple のエンジニアリング
- Brendan Gregg - クラウドパフォーマンス、カーネルエンジニア、スピーカー、著者
- Charles Nutter - JRuby の関係者
- Claes Redestad - Oracle での OpenJDK 関連の開発
- Cliff Click - HotSpot サーバーコンパイラの創設者
- Dave Dice - Oracle 内のスケーラブルな同期研究グループの上級研究科学者
- Dávid Karnok - RxJavaのコミッターで、高度なRxJavaについてブログを書いている人物
- Doug Lea - Javaメモリモデルの著者
- Gil Tene - Azul Systems
- Heinz Kabutz - 250以上のJava専門家向けニュースレターの著者
- Ivan Krylov - JVMスペシャリスト
- Jake Wharton - Square、Google、オープンソース開発者
- John Rose - HotSpot開発者
- Jonas Bonér - Lightbendの創業者およびCTO
- Lukas Eder - ブログを書いている人物。JOOQの著者
- Marcus Lagergren - Java言語チームの元メンバー
- Mark Reinhold - オラクルのJavaプラットフォームグループ首席アーキテクト
- Martin Thompson - 顔がパストなパフォーマンスのギャング
- Martijn Verburg - Javaチャンピオン
- Kirk Pepperdine - 高性能および分散コンピューティング分野でほぼ20年間活動している人物
- Nitsan Wakart - Azul Systems
- Norman Maurer - Netty開発者
- Paul Phillips - 永遠に確立されたSLOC Scalaコンパイラ開発者
- Per Liden - オラクルでのHotSpot JVMの開発に携わっている人物
- Peter Lawrey - 競争優位性を実現するための高性能Javaシステムの革新的開発者
- Rafael Winterhalter - ByteBuddyの著者
- Richard Warburton - 開発者、スピーカー、著者。
- Richard Startin - パフォーマンスアナリスト、開発者、ブロガー。
- Ron Pressler - 並列宇宙。JVM向けのフィバーやコンティニュアのリーダー。
- Stephen Colebourne - Javaチャンピオン。時折ブロガーおよびスピーカー。JodaプロジェクトおよびJSR-310で最も知られている。
- Todd L. Montgomery - 元CTO、元NASA研究者、ネットワークゲイク、メッセージングミドルウェア設計者。
- Stéphane Maldini - PivotalでのProject Reactorリーダー。
- Stuart Marks - ドクター・デプレカタ。Java/JDK/OpenJDK開発者
- Vladimir Ivanov - OracleでのHotSpot JVMをハッキング。
- Viktor Klang - Typesafe Inc.での副CTO。
コントリビューション
コントリビューションを歓迎します。
ガイドラインはcontributing.mdを参照してください。