24
G1GCG1とはこれいかに! fun-tech meetup #5 出ましたJava9記念 Javaのあれこれ入門編~ 2017/11/10@kitaji0306

20171110 fun-tech #5 g1 gc

Embed Size (px)

Citation preview

Page 1: 20171110 fun-tech #5 g1 gc

G1GCのG1とはこれいかに!~fun-tech meetup #5

出ましたJava9記念 Javaのあれこれ入門編~

(2017/11/10)@kitaji0306

Page 2: 20171110 fun-tech #5 g1 gc

さらっと自己紹介(通称:キタジー)

● 株式会社オープンストリーム

○ ITサービスマネジメント本部

■ システムライフサイクルマネジメント部

● Javaエンジニア

○ 一時期 インフラエンジニア

■ OracleのインストールやRACの構築等

● OORer○ ONE OK ROCKer

■ ワンオク好き

Page 3: 20171110 fun-tech #5 g1 gc

あじぇんだ

● GCとは

● Javaの主なGC● G1GCの特徴

● まとめ

そうだ JJUG CCC 2017 FALL 行こう

2017/11/18(土)

Page 4: 20171110 fun-tech #5 g1 gc

GCとは

Page 5: 20171110 fun-tech #5 g1 gc

GCとは

● ガベージコレクション

● メモリのお掃除やさん

● JavaはJVMがお掃除やさんをちゃんと雇ってるんです

※画像はgeechsマガジンさんのHPから拝借

Page 6: 20171110 fun-tech #5 g1 gc

もしGCが無かったら

● 掃除しなくてゴミ部屋になっちゃったり

○ メモリーリーク

● 自分でゴミ掃除したらゴミ以外も捨てちゃったり

○ 不具合!!!

● 怖くてゴミ出せない!!

※画像はgeechsマガジンさんのHPから拝借

Page 7: 20171110 fun-tech #5 g1 gc

STW(GCを語る上で外せない言葉)

● Stop the Worldの略

● Javaのスレッドが止まる

● アプリケーションが止まる

※画像は。。。

Page 8: 20171110 fun-tech #5 g1 gc

Javaの主なGC

Page 9: 20171110 fun-tech #5 g1 gc

Java(HotSpot)における主なGCの種類

● シリアルGC● パラレルGC● CMSGC● G1GC

Page 10: 20171110 fun-tech #5 g1 gc

GCあるある

● GCの種類ってNewとかOldとか世代別のことでしょ?

○ 世代別GCもGCの方式の一つです

● メジャーGC(Full GC)中はSTWなんでしょ?

○ そうとは限らない

※画像は日本サード・パーティさんの HPから拝借

Page 11: 20171110 fun-tech #5 g1 gc

シリアルGC

● 名前の通りシングルスレッドでGC!

● 32bitでシングルコアのJava8以前ではデフォルト

○ もうそんな環境なかなかないと思いますが。。。

○ あえて指定しないとお目にかかれないのでは。。。

● STWが長い

※画像は日本サード・パーティさんの HPから拝借

Page 12: 20171110 fun-tech #5 g1 gc

パラレルGC

● 64bitのJava8以前ではデフォルト

● STWがシリアルGCよりは短い

● 多分、今Javaで一番多く利用されているGCだと

※画像は日本サード・パーティさんの HPから拝借

Page 13: 20171110 fun-tech #5 g1 gc

CMSGC(Java1.4.1から)

● コンカレント・マーク・スイープ

● アプリケーションとGCが同時に動いてる!

● STWがパラレルよりさらに短い

※画像は日本サード・パーティさんの HPから拝借

Page 14: 20171110 fun-tech #5 g1 gc

コンカレント?マーク?スイープ?

● マーク

○ まだ生きていると思われるオブジェクトにしるし

● スイープ

○ しるしのないオブジェクトは死亡

● コンカレント

○ それらを(アプリケーションと)平行してやるよ

Page 15: 20171110 fun-tech #5 g1 gc

G1GC(Java7から)

● Java9からデフォルトのGCとなった

● 詳細は後で説明するよ

※画像は日本サード・パーティさんの HPから拝借

Page 16: 20171110 fun-tech #5 g1 gc

ここでちょっと寄り道

自分のプロジェクトではどんなGCが利用されているにゃ?

Page 17: 20171110 fun-tech #5 g1 gc

G1GCの特徴

Page 18: 20171110 fun-tech #5 g1 gc

こんな特徴あるよ

● ゴミの多いところを予測して重点処理(収集と圧縮)

● 細かい単位(リージョン)の扱いで断片化しずらい

○ その点がCMSGCが非推奨となった理由?

● STWを最大停止時間で(ある程度)制御

○ MaxGCPauseMillis(デフォルトは200ms)

※画像は日本サード・パーティさんの HPから拝借

Page 19: 20171110 fun-tech #5 g1 gc

G1GCの光と影

● 光

○ STWが短い

■ 世界は殆ど止まらない!

○ 大容量ヒープ割り当てのオーバーヘッドが小

■ 64bitの広大なメモリ空間が効率よく使える!

● 影

○ 割り当てるメモリが多くないと効果が薄い?

■ マイクロなサービスには不向き!?

○ 処理が細かく多いのでCPU使用率が高くなる

■ アプリケーションのスループットに影響も!?

Page 20: 20171110 fun-tech #5 g1 gc

G1GCの使いどころ

● ヒープサイズが大きい(6GB以上)

● ほぼ一時停止しないでほしい環境(500ms以内)

● CMSGCやパラレルGCを利用していて下記のような状態

○ ライブオブジェクトが50%を占める

○ オブジェクトの割当て率、昇格率が大きく変化する

○ STWが0.5秒以上かかる

※オラクルのG1GCのページに指針が出ています

Page 21: 20171110 fun-tech #5 g1 gc

まとめ

Page 22: 20171110 fun-tech #5 g1 gc

GCについて

● Java9を利用するならG1GCのアルゴリズムは抑えよう

● 巨大なヒープを利用しつつ短いSTW万歳

● CMSGCサヨウナラ

G1GCのG1は細かいゴミ処理を優先した

ガベージファースト

Page 23: 20171110 fun-tech #5 g1 gc

それよりも言いたいこと…

みなさん

次は是非喋る側に!!

大変な事もあるけどきっと身になります!

Page 24: 20171110 fun-tech #5 g1 gc

ご清聴いただきありがとうございました!