Your SlideShare is downloading. ×
JVM的な何か@JVM Operation Casual Talk
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

JVM的な何か@JVM Operation Casual Talk

4,887
views

Published on


0 Comments
23 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,887
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
2
Comments
0
Likes
23
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. JVM的なナニカを話す -‐‑‒GC戦略略をそえて-‐‑‒ @shot6
  • 2. というわけで •  おおたに、です •  @shot6 •  最近は? – Go,  Hackなどを触るなど
  • 3. h"p://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html  
  • 4. ヒープストラクチャの基本 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From(S0)   TO(S1)   •  Young  Generation •  新規で⽣生成されたオブジェクトの⼊入るスペース •  Eden,  Survivor(S0  and  S1) •  Old  Generation •  より⽣生存期間の⻑⾧長いオブジェクトの⼊入るスペース •  Permanent  Generation(Java8でMetaspaceへ) •  クラスやメソッド/Code  Cacheが⼊入るスペース
  • 5. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO  
  • 6. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO  
  • 7. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   Agingされて格納
  • 8. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   消去!  
  • 9. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   Swapされる(ハズ)
  • 10. メジャーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   Old/Permが増加してくるとメジャーGCが発⽣生する ・より影響のでかいStop  the  World ・パーマネント領領域(user  classloaderの参照切切れ)
  • 11. 設定項⽬目の基本 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   -‐‑‒Xmx -‐‑‒XX:MaxPermSize -‐‑‒XX:PermSize -‐‑‒Xms -‐‑‒XX:MaxNewSize -‐‑‒XX:NewSize
  • 12. 設定項⽬目の基本(2) 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   Young  :  Old -‐‑‒XX:NewRatio(2) Eden  :  Survivor(From+To) -‐‑‒XX:NewSurvivorRatio(8:1:1) Oldへのプロモーション -‐‑‒XX:MaxTeruningThreshold(15?)
  • 13. JVMでの⼀一貫したパフォーマンス のためには •  マイナーGCを許容して、メジャーGCを   極⼒力力起こさせないのが⼤大事 – Concurrent  Mark  and  Sweep(CMS) – でも最近はG1もあるよ(-‐‑‒XX:+UseG1GC) – Garbage  First  Garbage  Collection •  Heap領領域を2048個のRegionに分割して管理理 •  0.5秒以内にGCが終わるよう推測モデルを持つ?
  • 14. GCの基本戦略略 •  基本はConcurrent  Mark  Sweep(CMS) –  -‐‑‒XX:+UseConcMarkSweepGCで。 –  Young領領域はParallel  GC –  Old領領域はCMSで実施 •  CPUコアが少ないとき(1  or  2)はCMS  Incremental –  -‐‑‒XX:+UseConcMarkSweepGC  –XX: +CMSIncrementalMode –  ちょいちょいヒープを解放。Oldの解放時間は⻑⾧長めになる •  G1GCには期待値⼤大。ただどんくらい使われてる? –  -‐‑‒XX:UseG1GC –  6GB以上のヒープのときに最も有効 –  Java7で本格導⼊入
  • 15. 比較   Collector   Young領域   Old領域   コンパクション   利点   欠点   コマンドLINE   Serial   Serial/STW   シリアルに CMS   あり   あんの?   -­‐XX: +UseSerialGC   Parallel   Parallel/ STW   シリアルに CMS   あり   Youngの Collect   Oldの遅さ   -­‐XX: +UseParallelGC   Parallel   CompacAng   Parallel/ STW   Parallelにコ ンパクション   あり   OldのCollect も早い   忘れたw   -­‐XX: +UseParallelOld GC     Concurrent   Mark   Sweep(CMS)   Parallel/ STW   ほぼ並行に Collectと Concurrent   Mark/IniAal   MarkとRemarkで はSTW   なし   OldでもSTW が短い   並列Collect中 にCPUくう。 Youngでの Pause多い。 追加のヒープ   -­‐XX: +UseConcMarkS weepGC     CMS   Increment   Parallel/ STW   上と同じ   なし   上と同様だ がより少な いCPUで効 果的   上記同様   -­‐XX: +CMSIncrement alMode     G1   リージョン分割(one  region   1MB)して、Markしガーベー ジ収集。   ほぼあり   予測可能な STW(<  0.5   sec)、でかい ヒープで有効   スループット の劣化   -­‐XX:+UseG1GC   STW  =  Stop  the  World  
  • 16. その他のTips •  JVMエルゴノミクスは避けましょう –  -‐‑‒serverで明⽰示的な指定を –  Server-‐‑‒class  Machine  Detection •  http://docs.oracle.com/javase/7/docs/technotes/ guides/vm/server-‐‑‒class.html •  Parallel  Collector/CMS/G1GC向け –  -‐‑‒XX:ParallelGCThreads –  -‐‑‒XX:MaxGCPauseMillis
  • 17. ご参考 •  Java  SE  6  HotSpot  Virtual  Machine   Garbage  Collection  Tuning –  http://www.oracle.com/technetwork/java/ javase/gc-‐‑‒tuning-‐‑‒6-‐‑‒140523.html   •  G1GCなどの各オプション –  http://www.oracle.com/technetwork/java/ javase/tech/vmoptions-‐‑‒jsp-‐‑‒140102.html •  Java  Garbage  Collection  Basics –  http://www.oracle.com/webfolder/ technetwork/tutorials/obe/java/gc01/ index.html
  • 18. ありがとうございました