Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JVM GCs and why should I care?
Search
Maciej Biłas
June 28, 2013
Technology
87
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JVM GCs and why should I care?
Very brief introduction into JVM GC tuning given at a SoftwareMill tech talk.
Maciej Biłas
June 28, 2013
More Decks by Maciej Biłas
See All by Maciej Biłas
akka-cluster-etcd
maciejb
0
270
Testing with Docker
maciejb
1
120
ArchieML
maciejb
0
150
I code for Warsaw
maciejb
0
220
Warsaw JUG: Listen to the sounds of your application
maciejb
0
160
Poznań JUG: Listen to the sounds of your application
maciejb
0
89
Other Decks in Technology
See All in Technology
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.3k
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
300
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.8k
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
32
28k
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
3
600
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
240
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
360
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
4
670
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
530
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
6
3.2k
Von-Neumann Machines, Dreams & The Futures of IT
ufried
0
110
AIは推し活である。
kurazuuuuuu
1
850
Featured
See All Featured
Accessibility Awareness
sabderemane
1
210
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
530
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
400
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
530
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
510
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
380
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Building an army of robots
kneath
307
46k
Writing Fast Ruby
sferik
630
63k
Transcript
JVM GCs and why should I care? Maciej Biłas <
[email protected]
>
You should not unless you have to
How do I tell I have to? -verbose:gc -Xloggc:<filename> -XX:+PrintGCDetails
-XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime
Yes, now you have to time since start: [Full] GC
heap_taken_before_GC -> heap_taken_after_GC (total heap size) pause in seconds 29422.361: [Full GC 1704272K->1175099K(1781760K), 5.2196310 secs] 29427.588: [GC 1176939K(1781760K), 0.0135230 secs] 29430.034: [Full GC 1651801K->1239586K(1781760K), 5.3722150 secs] 29435.591: [Full GC 1411504K->1196906K(1781760K), 5.3212200 secs]
What now? Add more memory to the heap before doing
any GC tuning.
Pro tips • Have a realistic stress test • Diagnose
if the problem is GC-related • Define your performance goals
What to optimize? • Throughput • Latency • Memory
Available collectors • Serial • Parallel • CMS (+ parallel
new) • G1 • experimental in late Java 6, available in Java 7
The heap
Perm gen • Perm gen does not count to heap
size • Perm gen is gone since Java 8
JVM defaults if CPUs >= 2 && memory >= 2GiB
server else client
Client and server classes Machine Heap size GC Client ???
Serial Server Initial: memory / 64 Max: MIN(memory / 4, 1GiB) Parallel Source: http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#par_gc.ergonomics.default_size
JSW case -server -Xms5000m -Xmx5000m -XX:NewRatio=1 -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC
-XX:+UseCompressedOops -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -verbose:gc
JSW after tuning 2022.201: [GC 2022.201: [ParNew: 2176832K- >139349K(2304000K), 0.1241120
secs] 2311896K- >274413K(4864000K) icms_dc=0 , 0.1243120 secs] [Times: user=0.48 sys=0.00, real=0.13 secs] 2746.297: [GC 2746.298: [ParNew: 2187349K- >122293K(2304000K), 0.2227440 secs] 2322413K- >327073K(4864000K) icms_dc=0 , 0.2229290 secs] [Times: user=0.67 sys=0.08, real=0.23 secs] 3528.443: [GC 3528.443: [ParNew: 2170293K- >57977K(2304000K), 0.0544880 secs] 2375073K- >278050K(4864000K) icms_dc=0 , 0.0546750 secs] [Times: user=0.18 sys=0.02, real=0.06 secs]
You can also try -XX:MaxGCPauseMillis
Not covered here • Most GC tuning flags • Go
check them yourselves • Safe points • Other GC implementations • the pauseless one from Azul especially
Resources • JVM 6.0 Tuning http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html • List of JVM
options http://www.oracle.com/technetwork/java/javase/tech/vmoptions- jsp-140102.html • Sizing TLABs https://blogs.oracle.com/daviddetlefs/entry/tlab_sizing_an_annoying_little • Server class machine detection http://docs.oracle.com/javase/6/docs/technotes/guides/vm/server- class.html • Java Garbage Collection Distilled http://www.infoq.com/articles/Java_Garbage_Collection_Distilled