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

Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Garbage Collection(aka Automatic Memory Management)

Douglas Q. Hawkinshttp://[email protected]

Page 2: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Why?

Page 3: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Leaky Abstraction

2 of 3 Optimization Flags Are For Memory Management

Page 4: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

but not about tuning per se

......

Page 5: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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 - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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 - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Fundamentals

Page 8: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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

Page 9: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Stack Frames

Mark & Sweep

Static VariablesSystem.in

System.out

Page 10: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Mark Compact

Page 11: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Allocation

4

8

Page 12: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Copy Collector

Page 13: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Copy Collector

Page 14: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Tracing Problem

Random Walk of HeapCache Hostile

Bad Idea on Large Heap

Page 15: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Generational HypothesisBy

tes

Surv

iving

Bytes Allocated

Infants

Page 16: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

GenerationalYoung

Old / Tenured

Stack Frames

Static VariablesSystem.in

System.out

Page 17: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Remembered SetYoung

Old

Stack Frames

Static VariablesSystem.in

System.out

Page 18: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Remembered SetYoung

Old

Stack Frames

Static VariablesSystem.in

System.out

Page 19: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

GC in Java VMs

Page 20: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

HotSpot Garbage CollectorYoung Generation

Old Generation

Eden

S1S0

Page 21: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Young vs Tenured CollectionsBy

tes

Surv

iving

Bytes Allocated

Young Tenured

Page 22: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Which Tracing Strategy?

Low(Young Region) Copy

High(Tenured Region)

Mark & SweepOR

Mark Compact

Liveness Strategy

Page 23: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Object AllocationYoung Generation

Old Generation

Eden

S1S0

TLAB

Page 24: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Minor CollectionYoung Generation

Old Generation

Eden

S1S0

TLAB

1 2

Page 25: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Major CollectionYoung Generation

Old Generation

Eden

S1S0

Page 26: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Permanent GenerationYoung Generation

Old Generation

Eden

S1S0

Permanent Generation

Bootstrap App Server Web Application

C C C C C C C C

Page 27: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Demo

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

Page 28: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Tuning

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

Steady State

Page 29: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Newer 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.

8x

Adaptive Tuning

Page 30: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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 31: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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 32: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Set XX:PermSize = XX:MaxPermSize

Again, stops region resizingwhich would require a full GC

1.2-1.5x

Page 33: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

GC ChoicesSerial ParallelVS.

Stop theWorld Concurrent

Compacting Non-compacting

VS.

Full VS. Incremental

Page 34: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Application Thread GC Thread

ParallelSerial

Stop the World!

Page 35: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Why Stop the World?

0x0C

0x0C

0x0C0x04

0x04

0x04

Page 36: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Parallel MarkCompact

Application Thread GC Thread

ConcurrentMark & Sweep

Concurrent Marking

Remark

Concurrent Sweep

Page 37: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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 38: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Application Thread GC Thread

Throughput vs Latency

Page 39: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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 40: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

GCs in Other JVMs

Page 41: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

J9Nursery

Tenured

SurvivorAllocate

C

Page 42: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

JRockitNursery

Tenured

Keep Area Survivor

C C

C

Page 43: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Hybrid Mark Sweep & Copy

To From

Page 44: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

New GCs in Java VMs

Page 45: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

G1:Garbage First & Balanced

Page 46: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

G1 & Balanced GC

Unused Young Old

Page 47: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

G1 - Minor Collection

Unused Young Old

Page 48: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Unused Young Old

G1 - Major Collection

Page 49: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Azul C4Continuously Concurrent Compacting Collector

To From

Page 50: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Alternatives to Hard References & GC

Page 51: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

WeakReference

WR

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

Page 52: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

SoftReference

SR

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

Garbage Collected if Low on Space

Page 53: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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 54: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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 55: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

PhantomReference

ReferenceQueue

PR

X

Page 56: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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

Page 57: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

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 58: Understanding Garbage Collection - Meetupfiles.meetup.com/87071/Understanding Garbage Collection.pdfMaximize Collection during Minor GCs Avoid Major GCs at much as possible Promote

Q&A