Understanding Garbage Collection

57
Understanding Garbage Collection (aka Automatic Memory Management) Douglas Q. Hawkins http://www.dougqh.net [email protected]

description

Overview of Garbage Collection in Java - covers basic GC concepts, GC mechanics, and provides basic tuning guidelines

Transcript of Understanding Garbage Collection

Page 1: Understanding Garbage Collection

UnderstandingGarbage Collection(aka Automatic Memory Management)

Douglas Q. Hawkinshttp://[email protected]

Page 2: Understanding Garbage Collection

Why?

Page 3: Understanding Garbage Collection

Leaky Abstraction

2 of 3 Optimization Flags Are For Memory Management

Page 4: Understanding Garbage Collection

but not about tuning per se

......

Page 5: Understanding Garbage Collection

HotSpot Collectors

Young

Old

-XX:+UseSerialGC

-XX:+UseParNewGC -XX:+UseParallelGC

-XX:+UseConcMarkSweepGC -XX:+UseParallelOldGC

Serial ParallelScavenge

Serial Old(Mark Compact)

Concurrent Mark & Sweep

ParallelOld

(Mark Compact)

Parallel

Page 6: Understanding Garbage Collection

TopicsBasic Garbage Collection Strategies & Terminology

Garbage Collection in HotSpot

Garbage Collection in J9 and JRockit

Alternatives to Garbage Collection

Azul C4

Page 7: Understanding Garbage Collection

Fundamentals

Page 8: Understanding Garbage Collection

Tasks for a Tracing GCIdentify Live ObjectsRemove Dead ObjectsOptionally, Coalesce Free Space (Compaction)

Page 9: Understanding Garbage Collection

Stack Frames

Mark & Sweep

Static VariablesSystem.in

System.out

Page 10: Understanding Garbage Collection

Mark Compact

Page 11: Understanding Garbage Collection

Allocation

4

8

Page 12: Understanding Garbage Collection

Copy Collector

Page 13: Understanding Garbage Collection

Tracing Problem

Random Walk of HeapCache Hostile

Bad Idea on Large Heap

Page 14: Understanding Garbage Collection

Generational HypothesisBy

tes

Surv

iving

Bytes Allocated

Infants

Page 15: Understanding Garbage Collection

GenerationalYoung

Old / Tenured

Stack Frames

Static VariablesSystem.in

System.out

Page 16: Understanding Garbage Collection

Remembered SetYoung

Old

Stack Frames

Static VariablesSystem.in

System.out

Page 17: Understanding Garbage Collection

GC in Java VMs

Page 18: Understanding Garbage Collection

HotSpot Garbage CollectorYoung Generation

Old Generation

Eden

S1S0

Page 19: Understanding Garbage Collection

Young vs Tenured CollectionsBy

tes

Surv

iving

Bytes Allocated

Young Tenured

Page 20: Understanding Garbage Collection

Which Tracing Strategy?

Low(Young Region) Copy

High(Tenured Region)

Mark & SweepOR

Mark Compact

Liveness Strategy

Page 21: Understanding Garbage Collection

Object AllocationYoung Generation

Old Generation

Eden

S1S0

TLAB

Page 22: Understanding Garbage Collection

Minor CollectionYoung Generation

Old Generation

Eden

S1S0

TLAB

1 2

Page 23: Understanding Garbage Collection

Major CollectionYoung Generation

Old Generation

Eden

S1S0

Page 24: Understanding Garbage Collection

Permanent GenerationYoung Generation

Old Generation

Eden

S1S0

Permanent Generation

Bootstrap App Server Web Application

C C C C C C C C

Page 25: Understanding Garbage Collection

Demo

https://visualvm.dev.java.net/plugins.htmlhttps://visualvm.dev.java.net/

Page 26: Understanding Garbage Collection

Tuning

Newer JVMs can adaptively tune,but you may not want to rely on that.

Steady State

Page 27: Understanding Garbage Collection

8xNewer JVMs can automatically tune,but you may not want to rely on that.

-XX:MaxGCPauseMillis-XX:GCTimeRatio

Meets these goals by adjusting the heap size.

Adaptive Tuning

Page 28: Understanding Garbage Collection

Maximize Collection during Minor GCsAvoid Major GCs at much as possible

Promote as little as possible

Maximize Available Memory

Adjust for 2 of 3 GC GoalsThroughput

LatencyFootprint

Basic Principles

Page 29: Understanding Garbage Collection

Stops region resizingwhich would require a full GC

Set Xms = Xmxinitial heap size max heap size

3-4xYoung (Xmn): 1-1.5x

Old: 2-3x

Page 30: Understanding Garbage Collection

Set XX:PermSize = XX:MaxPermSize

Again, stops region resizingwhich would require a full GC

1.2-1.5x

Page 31: Understanding Garbage Collection

GC ChoicesSerial ParallelVS.

Stop theWorld Concurrent

Compacting Non-compacting

VS.

Full VS. Incremental

Page 32: Understanding Garbage Collection

Application Thread GC Thread

ParallelSerial

Stop the World!

Page 33: Understanding Garbage Collection

Why Stop the World?

0x0C

0x0C

0x0C0x04

0x04

0x04

Page 34: Understanding Garbage Collection

BJL

Page 35: Understanding Garbage Collection

Parallel MarkCompact

Application Thread GC Thread

ConcurrentMark & Sweep

Concurrent Marking

Remark

Concurrent Sweep

Page 36: Understanding Garbage Collection

HotSpot Collectors

Young

Old

-XX:+UseSerialGC

-XX:+UseParNewGC -XX:+UseParallelGC

-XX:+UseConcMarkSweepGC -XX:+UseParallelOldGC

Serial ParallelScavenge

Serial Old(Mark Compact)

Concurrent Mark & Sweep

ParallelOld

(Mark Compact)

Parallel

Page 37: Understanding Garbage Collection

Application Thread GC Thread

Throughput vs Latency

Page 38: Understanding Garbage Collection

If Latency is Too High,Switch to ConcMarkSweep

CMS kicks in when old generation is 65% full.

Increase Old Generation an additional 25-30%

When compaction is needed it is serial,so avoid compaction at all costs!

Page 39: Understanding Garbage Collection

GCs in Other JVMs

Page 40: Understanding Garbage Collection

J9Nursery

Tenured

SurvivorAllocate

C

Page 41: Understanding Garbage Collection

JRockitNursery

Tenured

Keep Area Survivor

C C

C

Page 42: Understanding Garbage Collection

Hybrid Mark Sweep & Copy

To From

Page 43: Understanding Garbage Collection

New GCs in Java VMs

Page 44: Understanding Garbage Collection

G1:Garbage First & Balanced

Page 45: Understanding Garbage Collection

G1 & Balanced GC

Unused Young Old

Page 46: Understanding Garbage Collection

G1 - Minor Collection

Unused Young Old

Page 47: Understanding Garbage Collection

Unused Young Old

G1 - Major Collection

Page 48: Understanding Garbage Collection

Azul C4Continuously Concurrent Compacting Collector

To From

http://www.infoq.com/articles/azul_gc_in_detail

Page 49: Understanding Garbage Collection

Alternatives to Hard References & GC

Page 50: Understanding Garbage Collection

WeakReference

WR

WeakReference<Foo> fooRef = new WeakReference<Foo>(foo);Foo foo = fooRef.get();

Page 51: Understanding Garbage Collection

SoftReference

SR

SoftReference<Foo> fooRef = new SoftReference<Foo>(foo);Foo foo = fooRef.get();

Garbage Collected if Low on Space

Page 52: Understanding Garbage Collection

Be Careful With ReferencesReference<User> ref = ...if ( ref.get() != null ) { System.out.println(ref.get().getName());}

Possible NullPointerException

Reference<User> ref = ...User user = ref.get();if ( user != null ) { System.out.println(user.getName());}

Page 53: Understanding Garbage Collection

ConcurrentMap<Key, Graph> graphs = new MapMaker() .concurrencyLevel(4) .weakKeys() .maximumSize(10000) .expireAfterWrite(10, TimeUnit.MINUTES) .makeComputingMap( new Function<Key, Graph>() { public Graph apply(Key key) { return createExpensiveGraph(key); } });

Guava MapMaker & CacheBuilder

Page 54: Understanding Garbage Collection

PhantomReference

ReferenceQueue

PR

X

Page 55: Understanding Garbage Collection

Direct ByteBuffersByteBuffer buffer = ByteBuffer.allocateDirect(...);

Page 56: Understanding Garbage Collection

Additional Reading

The Garbage Collection HandbookBy Richard Jones, Antony Hoskin, Eliot Moss

http://www.amazon.com/The-Garbage-Collection-Handbook-Management/

Memory Management in theHotSpot Java Virtual Machinehttp://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf

By Charlie Hunt and Binu John

Java Performance

http://www.amazon.com/Java-Performance-Charlie-Hunt/

http://www.infoq.com/presentations/JVM-Performance-Tuning-twitterBy Attila Szegedi

Everything I Ever Learned AboutJVM Performance Tuning

Page 57: Understanding Garbage Collection

Questions?Thanks, please fill out your evaluations!

Douglas Q. Hawkinshttp://[email protected]