SlideShare a Scribd company logo
1 of 51
Download to read offline
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.1
JDK 8
JVM Improvements
David Buck
Java SE Sustaining Engineering
日本オラクル株式会社
#jdt2014_C2
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.2
The following is intended to outline our general product direction. It is intended
for information purposes only, and may not be incorporated into any contract.
It is not a commitment to deliver any material, code, or functionality, and should
not be relied upon in making purchasing decisions. The development, release,
and timing of any features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.3
Hello Everybody!
 バック・デイビッド
 Java SE の Sustaining Engineering
 元 JRockit のエンジニア
 HotSpot と JRockit 両方の JVM を担当
 Blog: https://blogs.oracle.com/buck/
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.4
Agenda
 PermGen の廃止
 Tiered Compilation
 その他の改善
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.5
PermGen の廃止
JEP 122: Remove the Permanent Generation
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.6
PermGen とは
 クラスのメタデータなどを格納する場所
 例えば:
– バイトコード
– intern された文字列
– static フィールドの値
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.7
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.8
PermGen の良くないところ
 サイジングが困難
– 考えられるポイント
 ロードするクラスの数
 ロードするクラスの大きさ
 クラスのオーバーヘッド
– 結局、試行錯誤
– デフォルトが小さい: 64MB-85MB
 パフォーマンスへの悪影響
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.9
PermGen の良いところ
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.10
ソリューション
 PermGen を廃止
 Metaspace メタスペースを導入
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.11
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.12
Metaspace vs. PermGen
 (デフォルトでは)サイズの制限がない
ユーザが意識する必要性がない
 GC システムが管理する必要がない
GC のパフォーマンスが良くなる
 アンロードを ClassLoader の単位で行う
断片化が発生しにくい
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.13
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.14
ClassLoader
Metachunk
Virtual Space
各 ClassLoader が自分の Metaspace を持つ
Metaspace が複数の Metachunk を持つ
Virtualspace が複数のMetachunk を含む
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.15
High Water Mark (高水位標)
 Full GC が発生しないと Metaspace のコレクションが行われない
 Full GC の頻度が低いシステムのメモリ使用量を制御する必要がある
 Metaspace のサイズが HWM を超えると Full GC が実行される
 調整する必要がある場合
– Full GC の頻度が高すぎる時
– メモリの使用量が大きすぎる時
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.16
Compressed Oops (圧縮参照)の概念
 64-bit のマシンでも、オブジェクトのアドレスを 32-bit に格納する
– Java ヒープの使用量を節約
– ヒープのベースアドレスからのオフセットを利用
– さらにアドレスの LSB を省略
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.17
Klass ポインターも圧縮しましょう
 Compressed Oops と同じように Java Heap を節約
 Compressed Class Pointer Space (CCPS) というメモリエリアを用意
 パフォーマンスに最も影響を及ぼすデータだけを格納する
– InstanceKlass、 ArrayKlass
– vTable
 それ以外は MetaSpace
– メソッド、バイトコード
– ConstantPool など
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.18
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.19
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.20
新しいコマンドラインのオプション
 -XX:MaxMetaspaceSize
 デフォルト = unlimited
 MetaSpace の最大サイズ(バイト数)を設定する
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.21
新しいコマンドラインオプション
 -XX:MetaspaceSize
 デフォルト = 21MB
 起動時に Full GC の頻度を減らすために大きくする
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.22
新しいコマンドラインオプション
 -XX:MinMetaspaceFreeRatio
– デフォルト = 40
 -XX:MaxMetaspaceFreeRatio
– デフォルト = 70
 High Water Mark の拡張と縮小を制御する
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.23
新しいコマンドラインオプション
 -XX:+UseCompressedClassPointers
– 64-bit では、デフォルトで有効
 -XX:CompressedClassSpaceSize
– デフォルト = 1G
– 変更が出来ないため、デフォルト値が大きい
– 起動時にはメモリを reserve するだけ
– 必要に応じて commit していく
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.24
MBean の変更
 新しい MemoryManagerMXBean: MetaspaceManager
 新しいメモリプール MXBean: Metaspace と CompressedClassSpace
 両方とも MemoryType.NON_HEAP
 Metaspace の Usage は両方(MS と CCS) の合計
 PermGen メモリプールがなくなりました
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.25
ツールも対応する
 jmap -permstat → jmap -clstats
 jstat -gc
 jcmd <pid> GC.class_stats
– 対象の JVM のコマンドラインで -XX:+UnlockDiagnosticVMOptions を
追加することが必要
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.26
Tiered Compilation
(階層型コンパイル)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.27
ちょっと待って、
これは JDK8 の新機能ではないでしょう!
 古い実装は HotSpot Express で 6u25 までバックポートされました
 JDK8 ではようやくデフォルトで有効!
 JDK8 の新しい実装は従来のバージョンよりかなり充実
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.28
背景: HotSpot の二つの JIT コンパイラ
 C1 (-client)
– コンパイル処理が速い
– 生成されるコードが(比較的)速くない
 C2 (-server)
– コンパイル処理に時間がかかる
– 生成されるコードが速い
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.29
つまり
 起動を速くしたい場合: C1
 起動後のパフォーマンスが必要な場合: C2
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.30
Tiered Compilation の概要
 Tiered Compilation は両方のコンパイラを平行で利用
 速い起動
 起動後のパフォーマンスもいい
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.31
Tiered Compilation の概要
C1 (client)
 ステップ1:インタプリタ
実行しながら Hot なメソッドを検出する
 ステップ2:ネイティブ
Hot と判断したメソッドを
JIT コンパイルし、実行する
従来の流れ
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.32
Tiered Compilation の概要
C2 (server)
 ステップ1:インタプリタ
実行しながらプロファイリングする
 ステップ2:ネイティブ
Hot と判断したメソッドを
1で取得したプロファイリングデータを使って
JIT コンパイルし、実行する
従来の流れ
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.33
Tiered Compilation の概要
 C2 がプロファイリングデータを必要とするので、
データを取得するためにインタプリタのフェーズが長い
重要なポイント!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.34
Tiered Compilation の概要
 インタプリタと C2 の間に C1 を入れて C1 でプロファイリングの
データを取得
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.35
 level 0 - インタプリタ
 level 1 - C1 フル最適化 (プロファイリングなし)
 level 2 - C1 呼び出し (invocation) とループ (back-edge) の
プロファイリング
 level 3 - C1 フルプロファイリング (level 2 + MDO)
– Level 2 より約30%遅い
 level 4 - C2
コンパイルのレベル
– branch
– call receiver type
– typecheck
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.36
コンパイルレベルの遷移
 level 0 -> level 3 -> level 4
– 0:インタプリタで実行され、Hot メソッドとして検出される
– 3:フルプロファイリングのC1でコンパイルされる
– 4:C2が3のデータを使って、再コンパイルする
一番理想的なシナリオ
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.37
コンパイルレベルの遷移
 それぞれのコンパイラにキューが存在
– C1 キュー
– C2 キュー
 コンパイルスレッドを待っているタスクがキューイングされる
 C1 キューの長さによってコンパイルの閾値 (CompileThreshold) が
自動的に調整される
 C2 のキューの長さによってメソッドが 0 から 2 にコンパイル
コンパイラのキューイング
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.38
コンパイルレベルの遷移
 0 -> 3 -> 4 (一番理想的).
 0 -> 2 -> 3 -> 4 (C2 のキューが長すぎ).
 0 -> (3->2) -> 4 (キューで行き先が変更される).
 0 -> 3 -> 1 or 0 -> 2 -> 1 (trivial、C2 がコンパイル出来ないメソッド).
 0 -> 4 (C1でコンパイルが出来ない, インタプリタでフルプロファイリ
ング).
 (1,2,3,4) → 0 ( 脱最適化 (deoptimization) )
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.39
コマンドラインのオプション
 -XX:+PrintCompilation
63 1 3 java.lang.String::equals (81 bytes)
63 2 n 0 java.lang.System::arraycopy (native) (static)
64 3 3 java.lang.Math::min (11 bytes)
64 4 3 java.lang.String::charAt (29 bytes)
66 6 3 java.lang.String::indexOf (70 bytes)
時間(ミリ秒) ID コンパイルレベル メソッド名 サイズ
トラブルシューティングで役に立つ
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.40
コマンドラインのオプション
 -XX:+PrintTieredEvents
0.169833: [call level=0 [java.lang.Object.<init>()V] @-1 queues=0,0 rate=n/a k=1.00,1.00 total=128,0 mdo=0(0),0(0) max
levels=0,0 compilable=c1,c1-osr,c2,c2-osr status=idle]
 イベント: call, loop, compile, remove-from-queue, update-in-queue, reprofile
 レベル: 0,2,3 (イベントが発生したレベル)
 キューの状態 (C1 キュー, C2 キュー)
 呼び出しのレート
 呼び出しのカウンター: 合計, mdo
 コンパイルの可能性
 状態 (idle、in-queue、など)
トラブルシューティングで役に立つ
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.41
JEE Application Deployment
0
1
2
3
4
5
6
7
8
9
10
Application 1 Application 2 Pre-Compiled Application
DeploymentTime(s)
Server Compiler Tiered Compiler
Tiered Compilation
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.42
その他の改善
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.43
JMX で診断コマンドを実行
 ローカルで jcmd コマンドだけではなく
 ネットワーク経由で診断コマンドの実行も可能
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.44
フォールスシェアリングの回避
 JEP 142: Reduce Cache Contention on Specified Fields
 キャッシュラインのフォールスシェアリングの回避
 Fork / Join で競合されるフィールドが唯一のキャッシュラインに格納
されるように、オブジェクトのレイアウト(パッド)を自動的に行う
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.45
JSR-292 のパフォーマンス改善
 Invoke Dynamic の実装が一新され、かなり速くなった
 Lambda と Nashorn のパフォーマンスに大きい貢献
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.46
JavaScript Engine – Nashorn
0
1
2
3
4
5
6
7
8
Speedup
JDK 7 - Rhino JDK 8 - Nashorn
JSR 292 - InvokeDynamic
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.47
JVM 側で直接のサポートの追加
 java.util.concurrent のパフォーマンス改善
 AES 暗号化のパフォーマンス改善
– X86/AMD64 の AES 専用命令を利用
 など
 JEP 171: Fence Intrinsics
 JEP 164: Leverage CPU Instructions for AES Cryptography
 +α
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.48
もう使う意味がない GC の組み合わせが非推奨に
 JEP 173: Retire Some Rarely-Used GC Combinations
 JDK 9 でサポートされなくなる予定
 -XX:-UseParNewGC -XX:+UseConcMarkSweepGC (DefNew + CMS)
 -XX:+UseParNewGC (ParNew + SerialOld)
 -Xincgc (ParNew + iCMS)
 -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC (ParNew + iCMS)
 -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC (DefNew + iCMS)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.49
結果として
0
20000
40000
60000
80000
100000
120000
JDK 7u17 JDK 7u40 JDK 8
Max-jOPS
SPECjbb2013 Improvement
Oracle JDK 7u17 – Oracle SPARC T5-2 – 75658 SPECjbb2013-MultiJVM Max-jOPS, 23334 SPECjbb2013-MultiJVM Critical-jOPS
Oracle JDK 7u40 – Oracle SPARC T5-2 – 81084 SPECjbb2013-MultiJVM Max-jOPS, 39129 SPECjbb2013-MultiJVM Critical-jOPS
Oracle JDK 8 – Oracle SPARC T5-2 – 114492 SPECjbb2013-MultiJVM Max-jOPS, 43963 SPECjbb2013-MultiJVM Critical-jOPS
Source: www.spec.org as of March 10th 2014
SPEC and the benchmark name SPECjbb are registered trademarks of Standard Performance Evaluation Corporation (SPEC)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.50
Thank You!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.51

More Related Content

What's hot

【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャーssuser070fa9
 
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...Tatsuya Watanabe
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012Takuro Iizuka
 
第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316ksk_ha
 
Pacemaker NextGen OSC2012TokyoFall-20120908
Pacemaker NextGen OSC2012TokyoFall-20120908Pacemaker NextGen OSC2012TokyoFall-20120908
Pacemaker NextGen OSC2012TokyoFall-20120908ksk_ha
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)NTT DATA Technology & Innovation
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javaYuji Kubota
 
試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』健太 松浦
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)NTT DATA Technology & Innovation
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化kazuhcurry
 
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)NTT DATA Technology & Innovation
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache maruyama097
 
Linux-HA Japanプロジェクトのこれまでとこれから
Linux-HA JapanプロジェクトのこれまでとこれからLinux-HA Japanプロジェクトのこれまでとこれから
Linux-HA Japanプロジェクトのこれまでとこれからksk_ha
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構Ryosuke MATSUMOTO
 
痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさTakatoshi Matsuo
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 

What's hot (20)

【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
 
第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316
 
Pacemaker NextGen OSC2012TokyoFall-20120908
Pacemaker NextGen OSC2012TokyoFall-20120908Pacemaker NextGen OSC2012TokyoFall-20120908
Pacemaker NextGen OSC2012TokyoFall-20120908
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷java
 
Mod mrubyについて
Mod mrubyについてMod mrubyについて
Mod mrubyについて
 
試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
 
Microblaze loader
Microblaze loaderMicroblaze loader
Microblaze loader
 
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache 
 
Linux-HA Japanプロジェクトのこれまでとこれから
Linux-HA JapanプロジェクトのこれまでとこれからLinux-HA Japanプロジェクトのこれまでとこれから
Linux-HA Japanプロジェクトのこれまでとこれから
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
 
痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 

Similar to Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]

単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQLRyusuke Kajiyama
 
MySQL Cluster でもフラッシュドライブを活用してみる
MySQL Cluster でもフラッシュドライブを活用してみるMySQL Cluster でもフラッシュドライブを活用してみる
MySQL Cluster でもフラッシュドライブを活用してみるTakahashi Tomoo
 
Open stack reference architecture v1 2
Open stack reference architecture v1 2Open stack reference architecture v1 2
Open stack reference architecture v1 2Dell TechCenter Japan
 
Solaris ディープダイブセミナー #4: A-2-1 サービス実行を超えた 新たなサービス管理アーキテクチャ Service Management...
 Solaris ディープダイブセミナー #4: A-2-1 サービス実行を超えた 新たなサービス管理アーキテクチャ Service Management... Solaris ディープダイブセミナー #4: A-2-1 サービス実行を超えた 新たなサービス管理アーキテクチャ Service Management...
Solaris ディープダイブセミナー #4: A-2-1 サービス実行を超えた 新たなサービス管理アーキテクチャ Service Management...SolarisJP
 
C14 Greenplum Database Technology - Large Scale-out and Next generation Analy...
C14 Greenplum Database Technology - Large Scale-out and Next generation Analy...C14 Greenplum Database Technology - Large Scale-out and Next generation Analy...
C14 Greenplum Database Technology - Large Scale-out and Next generation Analy...Insight Technology, Inc.
 
クラウドバイデフォルトは新しい日常で加速するハイブリッドクラウド、マルチクラウドデータ保護の最前線とコストの最適化
クラウドバイデフォルトは新しい日常で加速するハイブリッドクラウド、マルチクラウドデータ保護の最前線とコストの最適化クラウドバイデフォルトは新しい日常で加速するハイブリッドクラウド、マルチクラウドデータ保護の最前線とコストの最適化
クラウドバイデフォルトは新しい日常で加速するハイブリッドクラウド、マルチクラウドデータ保護の最前線とコストの最適化vxsejapan
 
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャZero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャオラクルエンジニア通信
 
Struggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupStruggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupRecruit Technologies
 
Struggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit GroupStruggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit GroupDataWorks Summit/Hadoop Summit
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudsamemoon
 
CloudStack概要と最新動向_JulyTechFesta
CloudStack概要と最新動向_JulyTechFestaCloudStack概要と最新動向_JulyTechFesta
CloudStack概要と最新動向_JulyTechFestasamemoon
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Chihiro Ito
 
クラウドを支える基盤技術の最新動向と今後の方向性
クラウドを支える基盤技術の最新動向と今後の方向性クラウドを支える基盤技術の最新動向と今後の方向性
クラウドを支える基盤技術の最新動向と今後の方向性Masayoshi Hagiwara
 
【第二回 ゼロからはじめる Oracle Solaris 11】03 ネットワーク環境の複雑性に対処する新しいネットワーク管理の仕組み ~ Oracle ...
【第二回 ゼロからはじめる Oracle Solaris 11】03 ネットワーク環境の複雑性に対処する新しいネットワーク管理の仕組み ~ Oracle ...【第二回 ゼロからはじめる Oracle Solaris 11】03 ネットワーク環境の複雑性に対処する新しいネットワーク管理の仕組み ~ Oracle ...
【第二回 ゼロからはじめる Oracle Solaris 11】03 ネットワーク環境の複雑性に対処する新しいネットワーク管理の仕組み ~ Oracle ...SolarisJP
 
2012-04-25 ASPLOS2012出張報告(公開版)
2012-04-25 ASPLOS2012出張報告(公開版)2012-04-25 ASPLOS2012出張報告(公開版)
2012-04-25 ASPLOS2012出張報告(公開版)Takahiro Shinagawa
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~Shinji Takao
 
Nashorn in the future (Japanese)
Nashorn in the future (Japanese)Nashorn in the future (Japanese)
Nashorn in the future (Japanese)Logico
 
これからのNashorn
これからのNashornこれからのNashorn
これからのNashornLogico
 

Similar to Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2] (20)

単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
 
MySQL Cluster でもフラッシュドライブを活用してみる
MySQL Cluster でもフラッシュドライブを活用してみるMySQL Cluster でもフラッシュドライブを活用してみる
MySQL Cluster でもフラッシュドライブを活用してみる
 
Open stack reference architecture v1 2
Open stack reference architecture v1 2Open stack reference architecture v1 2
Open stack reference architecture v1 2
 
Solaris ディープダイブセミナー #4: A-2-1 サービス実行を超えた 新たなサービス管理アーキテクチャ Service Management...
 Solaris ディープダイブセミナー #4: A-2-1 サービス実行を超えた 新たなサービス管理アーキテクチャ Service Management... Solaris ディープダイブセミナー #4: A-2-1 サービス実行を超えた 新たなサービス管理アーキテクチャ Service Management...
Solaris ディープダイブセミナー #4: A-2-1 サービス実行を超えた 新たなサービス管理アーキテクチャ Service Management...
 
C14 Greenplum Database Technology - Large Scale-out and Next generation Analy...
C14 Greenplum Database Technology - Large Scale-out and Next generation Analy...C14 Greenplum Database Technology - Large Scale-out and Next generation Analy...
C14 Greenplum Database Technology - Large Scale-out and Next generation Analy...
 
クラウドバイデフォルトは新しい日常で加速するハイブリッドクラウド、マルチクラウドデータ保護の最前線とコストの最適化
クラウドバイデフォルトは新しい日常で加速するハイブリッドクラウド、マルチクラウドデータ保護の最前線とコストの最適化クラウドバイデフォルトは新しい日常で加速するハイブリッドクラウド、マルチクラウドデータ保護の最前線とコストの最適化
クラウドバイデフォルトは新しい日常で加速するハイブリッドクラウド、マルチクラウドデータ保護の最前線とコストの最適化
 
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャZero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
 
Struggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupStruggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit group
 
Struggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit GroupStruggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit Group
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
 
CloudStack概要と最新動向_JulyTechFesta
CloudStack概要と最新動向_JulyTechFestaCloudStack概要と最新動向_JulyTechFesta
CloudStack概要と最新動向_JulyTechFesta
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
 
Tech deepdive#2 datastore_180317_share
Tech deepdive#2 datastore_180317_shareTech deepdive#2 datastore_180317_share
Tech deepdive#2 datastore_180317_share
 
クラウドを支える基盤技術の最新動向と今後の方向性
クラウドを支える基盤技術の最新動向と今後の方向性クラウドを支える基盤技術の最新動向と今後の方向性
クラウドを支える基盤技術の最新動向と今後の方向性
 
【第二回 ゼロからはじめる Oracle Solaris 11】03 ネットワーク環境の複雑性に対処する新しいネットワーク管理の仕組み ~ Oracle ...
【第二回 ゼロからはじめる Oracle Solaris 11】03 ネットワーク環境の複雑性に対処する新しいネットワーク管理の仕組み ~ Oracle ...【第二回 ゼロからはじめる Oracle Solaris 11】03 ネットワーク環境の複雑性に対処する新しいネットワーク管理の仕組み ~ Oracle ...
【第二回 ゼロからはじめる Oracle Solaris 11】03 ネットワーク環境の複雑性に対処する新しいネットワーク管理の仕組み ~ Oracle ...
 
2012-04-25 ASPLOS2012出張報告(公開版)
2012-04-25 ASPLOS2012出張報告(公開版)2012-04-25 ASPLOS2012出張報告(公開版)
2012-04-25 ASPLOS2012出張報告(公開版)
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
 
Nashorn in the future (Japanese)
Nashorn in the future (Japanese)Nashorn in the future (Japanese)
Nashorn in the future (Japanese)
 
これからのNashorn
これからのNashornこれからのNashorn
これからのNashorn
 

More from David Buck

JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]David Buck
 
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...David Buck
 
Java Bytecode Crash Course [Code One 2019]
Java Bytecode Crash Course [Code One 2019]Java Bytecode Crash Course [Code One 2019]
Java Bytecode Crash Course [Code One 2019]David Buck
 
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...David Buck
 
invokedynamic for Mere Mortals [Code One 2019]
invokedynamic for Mere Mortals [Code One 2019]invokedynamic for Mere Mortals [Code One 2019]
invokedynamic for Mere Mortals [Code One 2019]David Buck
 
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...David Buck
 
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]David Buck
 
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]David Buck
 
Z Garbage Collector
Z Garbage CollectorZ Garbage Collector
Z Garbage CollectorDavid Buck
 
Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019David Buck
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018David Buck
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそDavid Buck
 
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]David Buck
 
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]David Buck
 
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]David Buck
 
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]David Buck
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]David Buck
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]David Buck
 
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]David Buck
 

More from David Buck (20)

JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
 
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
 
Java Bytecode Crash Course [Code One 2019]
Java Bytecode Crash Course [Code One 2019]Java Bytecode Crash Course [Code One 2019]
Java Bytecode Crash Course [Code One 2019]
 
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
 
invokedynamic for Mere Mortals [Code One 2019]
invokedynamic for Mere Mortals [Code One 2019]invokedynamic for Mere Mortals [Code One 2019]
invokedynamic for Mere Mortals [Code One 2019]
 
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
 
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
 
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
 
Z Garbage Collector
Z Garbage CollectorZ Garbage Collector
Z Garbage Collector
 
Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそ
 
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
 
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
 
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
 
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
 
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
 

Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]

  • 1. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.1 JDK 8 JVM Improvements David Buck Java SE Sustaining Engineering 日本オラクル株式会社 #jdt2014_C2
  • 2. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.2 The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
  • 3. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.3 Hello Everybody!  バック・デイビッド  Java SE の Sustaining Engineering  元 JRockit のエンジニア  HotSpot と JRockit 両方の JVM を担当  Blog: https://blogs.oracle.com/buck/
  • 4. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.4 Agenda  PermGen の廃止  Tiered Compilation  その他の改善
  • 5. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.5 PermGen の廃止 JEP 122: Remove the Permanent Generation
  • 6. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.6 PermGen とは  クラスのメタデータなどを格納する場所  例えば: – バイトコード – intern された文字列 – static フィールドの値
  • 7. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.7
  • 8. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.8 PermGen の良くないところ  サイジングが困難 – 考えられるポイント  ロードするクラスの数  ロードするクラスの大きさ  クラスのオーバーヘッド – 結局、試行錯誤 – デフォルトが小さい: 64MB-85MB  パフォーマンスへの悪影響
  • 9. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.9 PermGen の良いところ
  • 10. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.10 ソリューション  PermGen を廃止  Metaspace メタスペースを導入
  • 11. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.11
  • 12. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.12 Metaspace vs. PermGen  (デフォルトでは)サイズの制限がない ユーザが意識する必要性がない  GC システムが管理する必要がない GC のパフォーマンスが良くなる  アンロードを ClassLoader の単位で行う 断片化が発生しにくい
  • 13. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.13
  • 14. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.14 ClassLoader Metachunk Virtual Space 各 ClassLoader が自分の Metaspace を持つ Metaspace が複数の Metachunk を持つ Virtualspace が複数のMetachunk を含む
  • 15. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.15 High Water Mark (高水位標)  Full GC が発生しないと Metaspace のコレクションが行われない  Full GC の頻度が低いシステムのメモリ使用量を制御する必要がある  Metaspace のサイズが HWM を超えると Full GC が実行される  調整する必要がある場合 – Full GC の頻度が高すぎる時 – メモリの使用量が大きすぎる時
  • 16. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.16 Compressed Oops (圧縮参照)の概念  64-bit のマシンでも、オブジェクトのアドレスを 32-bit に格納する – Java ヒープの使用量を節約 – ヒープのベースアドレスからのオフセットを利用 – さらにアドレスの LSB を省略
  • 17. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.17 Klass ポインターも圧縮しましょう  Compressed Oops と同じように Java Heap を節約  Compressed Class Pointer Space (CCPS) というメモリエリアを用意  パフォーマンスに最も影響を及ぼすデータだけを格納する – InstanceKlass、 ArrayKlass – vTable  それ以外は MetaSpace – メソッド、バイトコード – ConstantPool など
  • 18. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.18
  • 19. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.19
  • 20. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.20 新しいコマンドラインのオプション  -XX:MaxMetaspaceSize  デフォルト = unlimited  MetaSpace の最大サイズ(バイト数)を設定する
  • 21. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.21 新しいコマンドラインオプション  -XX:MetaspaceSize  デフォルト = 21MB  起動時に Full GC の頻度を減らすために大きくする
  • 22. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.22 新しいコマンドラインオプション  -XX:MinMetaspaceFreeRatio – デフォルト = 40  -XX:MaxMetaspaceFreeRatio – デフォルト = 70  High Water Mark の拡張と縮小を制御する
  • 23. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.23 新しいコマンドラインオプション  -XX:+UseCompressedClassPointers – 64-bit では、デフォルトで有効  -XX:CompressedClassSpaceSize – デフォルト = 1G – 変更が出来ないため、デフォルト値が大きい – 起動時にはメモリを reserve するだけ – 必要に応じて commit していく
  • 24. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.24 MBean の変更  新しい MemoryManagerMXBean: MetaspaceManager  新しいメモリプール MXBean: Metaspace と CompressedClassSpace  両方とも MemoryType.NON_HEAP  Metaspace の Usage は両方(MS と CCS) の合計  PermGen メモリプールがなくなりました
  • 25. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.25 ツールも対応する  jmap -permstat → jmap -clstats  jstat -gc  jcmd <pid> GC.class_stats – 対象の JVM のコマンドラインで -XX:+UnlockDiagnosticVMOptions を 追加することが必要
  • 26. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.26 Tiered Compilation (階層型コンパイル)
  • 27. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.27 ちょっと待って、 これは JDK8 の新機能ではないでしょう!  古い実装は HotSpot Express で 6u25 までバックポートされました  JDK8 ではようやくデフォルトで有効!  JDK8 の新しい実装は従来のバージョンよりかなり充実
  • 28. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.28 背景: HotSpot の二つの JIT コンパイラ  C1 (-client) – コンパイル処理が速い – 生成されるコードが(比較的)速くない  C2 (-server) – コンパイル処理に時間がかかる – 生成されるコードが速い
  • 29. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.29 つまり  起動を速くしたい場合: C1  起動後のパフォーマンスが必要な場合: C2
  • 30. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.30 Tiered Compilation の概要  Tiered Compilation は両方のコンパイラを平行で利用  速い起動  起動後のパフォーマンスもいい
  • 31. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.31 Tiered Compilation の概要 C1 (client)  ステップ1:インタプリタ 実行しながら Hot なメソッドを検出する  ステップ2:ネイティブ Hot と判断したメソッドを JIT コンパイルし、実行する 従来の流れ
  • 32. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.32 Tiered Compilation の概要 C2 (server)  ステップ1:インタプリタ 実行しながらプロファイリングする  ステップ2:ネイティブ Hot と判断したメソッドを 1で取得したプロファイリングデータを使って JIT コンパイルし、実行する 従来の流れ
  • 33. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.33 Tiered Compilation の概要  C2 がプロファイリングデータを必要とするので、 データを取得するためにインタプリタのフェーズが長い 重要なポイント!
  • 34. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.34 Tiered Compilation の概要  インタプリタと C2 の間に C1 を入れて C1 でプロファイリングの データを取得
  • 35. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.35  level 0 - インタプリタ  level 1 - C1 フル最適化 (プロファイリングなし)  level 2 - C1 呼び出し (invocation) とループ (back-edge) の プロファイリング  level 3 - C1 フルプロファイリング (level 2 + MDO) – Level 2 より約30%遅い  level 4 - C2 コンパイルのレベル – branch – call receiver type – typecheck
  • 36. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.36 コンパイルレベルの遷移  level 0 -> level 3 -> level 4 – 0:インタプリタで実行され、Hot メソッドとして検出される – 3:フルプロファイリングのC1でコンパイルされる – 4:C2が3のデータを使って、再コンパイルする 一番理想的なシナリオ
  • 37. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.37 コンパイルレベルの遷移  それぞれのコンパイラにキューが存在 – C1 キュー – C2 キュー  コンパイルスレッドを待っているタスクがキューイングされる  C1 キューの長さによってコンパイルの閾値 (CompileThreshold) が 自動的に調整される  C2 のキューの長さによってメソッドが 0 から 2 にコンパイル コンパイラのキューイング
  • 38. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.38 コンパイルレベルの遷移  0 -> 3 -> 4 (一番理想的).  0 -> 2 -> 3 -> 4 (C2 のキューが長すぎ).  0 -> (3->2) -> 4 (キューで行き先が変更される).  0 -> 3 -> 1 or 0 -> 2 -> 1 (trivial、C2 がコンパイル出来ないメソッド).  0 -> 4 (C1でコンパイルが出来ない, インタプリタでフルプロファイリ ング).  (1,2,3,4) → 0 ( 脱最適化 (deoptimization) )
  • 39. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.39 コマンドラインのオプション  -XX:+PrintCompilation 63 1 3 java.lang.String::equals (81 bytes) 63 2 n 0 java.lang.System::arraycopy (native) (static) 64 3 3 java.lang.Math::min (11 bytes) 64 4 3 java.lang.String::charAt (29 bytes) 66 6 3 java.lang.String::indexOf (70 bytes) 時間(ミリ秒) ID コンパイルレベル メソッド名 サイズ トラブルシューティングで役に立つ
  • 40. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.40 コマンドラインのオプション  -XX:+PrintTieredEvents 0.169833: [call level=0 [java.lang.Object.<init>()V] @-1 queues=0,0 rate=n/a k=1.00,1.00 total=128,0 mdo=0(0),0(0) max levels=0,0 compilable=c1,c1-osr,c2,c2-osr status=idle]  イベント: call, loop, compile, remove-from-queue, update-in-queue, reprofile  レベル: 0,2,3 (イベントが発生したレベル)  キューの状態 (C1 キュー, C2 キュー)  呼び出しのレート  呼び出しのカウンター: 合計, mdo  コンパイルの可能性  状態 (idle、in-queue、など) トラブルシューティングで役に立つ
  • 41. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.41 JEE Application Deployment 0 1 2 3 4 5 6 7 8 9 10 Application 1 Application 2 Pre-Compiled Application DeploymentTime(s) Server Compiler Tiered Compiler Tiered Compilation
  • 42. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.42 その他の改善
  • 43. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.43 JMX で診断コマンドを実行  ローカルで jcmd コマンドだけではなく  ネットワーク経由で診断コマンドの実行も可能
  • 44. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.44 フォールスシェアリングの回避  JEP 142: Reduce Cache Contention on Specified Fields  キャッシュラインのフォールスシェアリングの回避  Fork / Join で競合されるフィールドが唯一のキャッシュラインに格納 されるように、オブジェクトのレイアウト(パッド)を自動的に行う
  • 45. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.45 JSR-292 のパフォーマンス改善  Invoke Dynamic の実装が一新され、かなり速くなった  Lambda と Nashorn のパフォーマンスに大きい貢献
  • 46. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.46 JavaScript Engine – Nashorn 0 1 2 3 4 5 6 7 8 Speedup JDK 7 - Rhino JDK 8 - Nashorn JSR 292 - InvokeDynamic
  • 47. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.47 JVM 側で直接のサポートの追加  java.util.concurrent のパフォーマンス改善  AES 暗号化のパフォーマンス改善 – X86/AMD64 の AES 専用命令を利用  など  JEP 171: Fence Intrinsics  JEP 164: Leverage CPU Instructions for AES Cryptography  +α
  • 48. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.48 もう使う意味がない GC の組み合わせが非推奨に  JEP 173: Retire Some Rarely-Used GC Combinations  JDK 9 でサポートされなくなる予定  -XX:-UseParNewGC -XX:+UseConcMarkSweepGC (DefNew + CMS)  -XX:+UseParNewGC (ParNew + SerialOld)  -Xincgc (ParNew + iCMS)  -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC (ParNew + iCMS)  -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC (DefNew + iCMS)
  • 49. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.49 結果として 0 20000 40000 60000 80000 100000 120000 JDK 7u17 JDK 7u40 JDK 8 Max-jOPS SPECjbb2013 Improvement Oracle JDK 7u17 – Oracle SPARC T5-2 – 75658 SPECjbb2013-MultiJVM Max-jOPS, 23334 SPECjbb2013-MultiJVM Critical-jOPS Oracle JDK 7u40 – Oracle SPARC T5-2 – 81084 SPECjbb2013-MultiJVM Max-jOPS, 39129 SPECjbb2013-MultiJVM Critical-jOPS Oracle JDK 8 – Oracle SPARC T5-2 – 114492 SPECjbb2013-MultiJVM Max-jOPS, 43963 SPECjbb2013-MultiJVM Critical-jOPS Source: www.spec.org as of March 10th 2014 SPEC and the benchmark name SPECjbb are registered trademarks of Standard Performance Evaluation Corporation (SPEC)
  • 50. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.50 Thank You!
  • 51. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.51