Understanding Garbage Collection

Post on 10-May-2015

3.487 views 3 download

Tags:

description

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

Transcript of Understanding Garbage Collection

UnderstandingGarbage Collection(aka Automatic Memory Management)

Douglas Q. Hawkinshttp://www.dougqh.netdougqh@gmail.com

Why?

Leaky Abstraction

2 of 3 Optimization Flags Are For Memory Management

but not about tuning per se

......

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

TopicsBasic Garbage Collection Strategies & Terminology

Garbage Collection in HotSpot

Garbage Collection in J9 and JRockit

Alternatives to Garbage Collection

Azul C4

Fundamentals

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

Stack Frames

Mark & Sweep

Static VariablesSystem.in

System.out

Mark Compact

Allocation

4

8

Copy Collector

Tracing Problem

Random Walk of HeapCache Hostile

Bad Idea on Large Heap

Generational HypothesisBy

tes

Surv

iving

Bytes Allocated

Infants

GenerationalYoung

Old / Tenured

Stack Frames

Static VariablesSystem.in

System.out

Remembered SetYoung

Old

Stack Frames

Static VariablesSystem.in

System.out

GC in Java VMs

HotSpot Garbage CollectorYoung Generation

Old Generation

Eden

S1S0

Young vs Tenured CollectionsBy

tes

Surv

iving

Bytes Allocated

Young Tenured

Which Tracing Strategy?

Low(Young Region) Copy

High(Tenured Region)

Mark & SweepOR

Mark Compact

Liveness Strategy

Object AllocationYoung Generation

Old Generation

Eden

S1S0

TLAB

Minor CollectionYoung Generation

Old Generation

Eden

S1S0

TLAB

1 2

Major CollectionYoung Generation

Old Generation

Eden

S1S0

Permanent GenerationYoung Generation

Old Generation

Eden

S1S0

Permanent Generation

Bootstrap App Server Web Application

C C C C C C C C

Demo

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

Tuning

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

Steady State

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

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

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

Set XX:PermSize = XX:MaxPermSize

Again, stops region resizingwhich would require a full GC

1.2-1.5x

GC ChoicesSerial ParallelVS.

Stop theWorld Concurrent

Compacting Non-compacting

VS.

Full VS. Incremental

Application Thread GC Thread

ParallelSerial

Stop the World!

Why Stop the World?

0x0C

0x0C

0x0C0x04

0x04

0x04

BJL

Parallel MarkCompact

Application Thread GC Thread

ConcurrentMark & Sweep

Concurrent Marking

Remark

Concurrent Sweep

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

Application Thread GC Thread

Throughput vs Latency

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!

GCs in Other JVMs

J9Nursery

Tenured

SurvivorAllocate

C

JRockitNursery

Tenured

Keep Area Survivor

C C

C

Hybrid Mark Sweep & Copy

To From

New GCs in Java VMs

G1:Garbage First & Balanced

G1 & Balanced GC

Unused Young Old

G1 - Minor Collection

Unused Young Old

Unused Young Old

G1 - Major Collection

Azul C4Continuously Concurrent Compacting Collector

To From

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

Alternatives to Hard References & GC

WeakReference

WR

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

SoftReference

SR

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

Garbage Collected if Low on Space

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());}

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

PhantomReference

ReferenceQueue

PR

X

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

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

Questions?Thanks, please fill out your evaluations!

Douglas Q. Hawkinshttp://www.dougqh.netdougqh@gmail.com