garbage collection in the java hotspot(tm) virtual machine · point: low pause times • young...

44
java.sun.com/javaone/sf | 2004 JavaOne SM Conference | Session 1216 1 Garbage Collection in the Java HotSpot™ Virtual Machine Choices and Trade-Offs Peter Kessler Jon Masamitsu John Coomes Sun Microsystems, Inc. http://www.sun.com

Upload: others

Post on 30-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

java.sun.com/javaone/sf

| 2004 JavaOneSM

Conference | Session 1216 1

Garbage Collection in the Java HotSpot™ Virtual MachineChoices and Trade-Offs

Peter KesslerJon MasamitsuJohn CoomesSun Microsystems, Inc.http://www.sun.com

Page 2: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 2

Improve Java™ Platform Performance

Learn about different garbage collection choices in the Java HotSpot™ virtual machine and the consequences of those choices

Have a little fun

Choosing a garbage collector

Page 3: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 3

Agenda

Welcome to “GC Today”

Introductions

What’s New in GC

Parallel Collector

Concurrent Collector

Ergonomics

Choosing a Collector

Futures

Questions From “Our Listeners”

Page 4: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 4

Where Is GC Today?

• Serial collector─ Copying young generation─ Mark/Sweep/Compact old generation

• Incremental (train) collector─ Incremental old generation

• Parallel collector─ Parallel copying young generation

• Mostly concurrent collector─ Parallel copying young generation─ Concurrent old generation

Choice of collectors

Page 5: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 5

Introductions

• John Coomes─ Concurrent garbage collection

• Jon Masamitsu─ Ergonomics, parallel garbage collection

Today’s guest speakers

Page 6: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 6

What’s Coming in GC?

• Parallel collector─ Behavior-based tuning─ Dynamic generation sizing

• Mostly concurrent collector─ More parallelism─ Dynamic scheduling─ Promotion failure handling

• Incremental collector deprecated─ –Xincgc now selects concurrent collector

• Thread local allocation buffers─ Resizing based on usage

Page 7: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 7

Parallel Collector Updates

• Pause time goal─ Desired maximum pause

• Throughput goal─ Proportion of time in GC

• Minimize footprint─ When other goals are satisfied

• GC time limit─ What is “out of memory”?

Specify desired behavior

Page 8: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 8

Serial Collector

CPU 0

CPU 1

CPU 2

CPU 3Serial Young

Serial Mark-Sweep-Com

pact

User threadSerial GC thread

Safepoint

Page 9: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 9

Parallel Collector

“Throughput Matters”

CPU 0

CPU 1

CPU 2

CPU 3Parallel Young

Serial Mark-Sweep-Com

pact

User threadSerial GC threadParallel GC threadSafepoint

Page 10: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 10

Parallel Collector Updates

• Pause time goal─ Desired maximum pause

• Throughput goal─ Proportion of time in GC

• Minimize footprint─ When other goals are satisfied

• GC time limit─ What is “out of memory”?

Specify desired behavior

Page 11: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 11

Mostly Concurrent Collector

“Latency Matters”

CPU 0

CPU 1

CPU 2

CPU 3Initial M

ark

Concurrent Mark

Remark

Concurrent Sweep

Reset

User threadGC thread

Safepoint

Parallel Young

Page 12: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 12

Mostly Concurrent Collector Updates

• More parallelism during pauses─ Young generation scanning─ Reference object processing (soft, weak, etc.)

• Dynamic scheduling─ Start of old generation collection─ Pauses during old generation collection

• Promotion failure handling─ Better use of heap space─ Fewer full collections

Page 13: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 13

Agenda

Welcome to “GC Today”

Introductions

What’s New in GC

Parallel Collector

Concurrent Collector

Ergonomics

Choosing a Collector

Futures

Questions From “Our Listeners”

Page 14: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 14

Parallel Collector

• Maximize application time─ Reduce time in garbage collection

• No pause time requirements─ Or generous pause bounds

• Examples:─ Back-office processing─ Scientific computing

“Throughput Matters”

Page 15: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 15

Point: Collector for Throughput

• Parallel young generation collection─ Efficient─ Scalable

• Tuned for large servers ─ 2 CPUs to dozens of CPUs

• Faster than serial collector on 2 or more CPUs

• Serial old generation collection

Parallel collector

Page 16: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 16

Point: Parallel Collector Throughput Goal

• Throughput goal

• Measure throughput─ Time spent in GC─ Time spent outside of GC

• Grow generation sizes to meet goal─ Larger generations mean more time between GCs─ Both generations grow

• Adapt to changing application behavior

Automatic sizing

Page 17: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 17

Counterpoint: Parallel Collector Throughput Goal

• Why not use maximum heap settings?–Xmx and –Xms set to the same high value

• What about rapid changes in application behavior?

• What about compilation time?

Automatic sizing

Page 18: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 18

Point: Parallel Collector Pause Goal

• Maximum GC pause time goal─ Best effort─ Average + variance

• Measure young and old generation pauses─ Measured separately

• Shrink generation size to meet the goal─ A smaller generation usually collected more quickly

─Not always possible to shrink the heap

Automatic sizing

Page 19: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 19

Counterpoint: Parallel Collector Pause Goal

• Can the goal always be met?─ Performance can suffer

• What if only one generation pause is too long?─ Goal is not being met

• What if both generation pauses are too long?─ One generation shrinks at a time

Automatic sizing

Page 20: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 20

Summary on Parallel Collector

• Scales to higher numbers of CPUs

• Automatic sizing

• Occasional long pauses─ Not designed for latency constraints

“Throughput Matters”

Page 21: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 21

Agenda

Welcome to “GC Today”

Introductions

What’s New in GC

Parallel Collector

Concurrent Collector

Ergonomics

Choosing a Collector

Futures

Questions From “Our Listeners”

Page 22: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 22

Concurrent Collector

• Latency affected by pause times─ “Typical” GC stops all user threads to do work─ Response time suffers

• Areas where pauses matter─ User interaction─ Systems with work queues

─Time-outs cause extra work or retries

• Examples:─ Web servers/application servers─ Telecommunications switching─ Integrated development environments

“Latency Matters”

Page 23: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 23

Point: Low Pause Times

• Young generation collections─ Parallelism reduces pause times

• Old generation collections─ Most work done concurrently

─Application continues to run─One CPU used for GC work

─ Two short pauses─Parallelism reduces pause times

• Pauses more uniform

Concurrent collector

Page 24: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 24

Counterpoint: Low Pause Times

• Are spare CPUs needed?─ GC takes processing power from application─ Performance on 1-CPU platform

• Is a larger heap required?─ Fragmentation

─Does not compact the old generation─ “Floating garbage”

Concurrent collector

Page 25: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 25

Point: Scheduled Pauses

• Young generation collection─ Application stopped for entire collection

• Old generation collection─ Application stopped briefly

─ “Initial mark” and “remark”

• Young and old generation pauses independent ─ Cannot occur simultaneously─ Otherwise, no restriction

Concurrent collector

Page 26: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 26

Point: Scheduled Pauses

• Problem:─ Young generation pause occurs─ Immediately followed by old generation pause─ Application sees one long pause

• Solution: schedule old generation pauses─ Mid-way between young generation collections

Concurrent collector

Page 27: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 27

Counterpoint: Scheduled Pauses

• Does it reduce total pause time?

• What about rapid changes in allocation rate?

• What is the cost of scheduling the pauses?

Concurrent collector

Page 28: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 28

Point: Concurrent Collection Start

• Dynamically starts a concurrent collection─ Gathers statistics

─Collection duration─How fast old generation is being filled

─ Starts old generation collection “just in time”

• Adjusts as application changes

• Uses space more fully─ Less need for reserve

Concurrent collector

Page 29: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 29

Counterpoint: Concurrent Collection

• What happens if it starts too late?─ Must do a stop-the-world collection─ Much longer pause

• Can the collection start too early?─ Yes, but rarely─ Next collection will have better statistics

Concurrent collector

Page 30: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 30

Summary on Concurrent Collector

• Low latencies are achievable:─ 500, 200, even 100 milliseconds maximum pause─ Not guaranteed─ Depends on application, heap size, hardware, etc.

• Some automatic adjustments─ Default size of young generation─ When to start old generation collection─ Scheduling of old generation collection pauses

• Not fully “ergonomic” (yet)─ Must specify heap sizes instead of pause time

“Latency Matters”

Page 31: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 31

Agenda

Welcome to “GC Today”

Introductions

What’s New in GC

Parallel Collector

Concurrent Collector

Ergonomics

Choosing a Collector

Futures

Questions From “Our Listeners”

Page 32: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 32

Ergonomics

• Select the garbage collector─ Chose a collector to fit the needs

• Select the heap size─ One size does not fit all

• Select the runtime compiler─ –server versus –client

“Let the VM choose”

Page 33: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 33

Selections in the Java 2 Platform, Standard Edition (J2SE™) 1.4.x and Earlier

• Serial collector

• Smaller heap settings─ Initial heap: ~4MB─ Maximum heap: 64MB

• Client runtime compiler

The same for all applications

Page 34: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 34

Ergonomic Selections in the J2SE 1.5.0 Platform

• On server-class machines─ Parallel collector─ Larger heap settings

─ Initial heap: 1/64 physical memory up to 1GB─Maximum heap: 1/4 physical memory up to 1GB

─ Server runtime compiler

• On client machines─ Same as the J2SE 1.4.x platform

Better for some applications

Page 35: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 35

Server-class Machines

• Server-class machines have:─ 2 CPUs (or more)─ 2 GB memory (or more)

• Why base decision on machine type?─ Keep it simple, easy to explain─ Often indicates type of application─ Currently, choice must be made at startup

• Ideally, select based on desired behavior─ E.g., maximum pause time, desired throughput─ Adapt at runtime─ Future release

How we make the decision

Page 36: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 36

Choosing a Collector

• Is GC a problem?─ If not, let the VM choose

• Small heap?─ 20MB to 30MB or less, let the VM choose

• Pause time or response time limits?─ 3 seconds or less: start with concurrent collector─ 10 seconds or more: try parallel collector

Page 37: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 37

Second Thoughts on Choosing the Concurrent Collector

• Allocation rate versus collection rate─ Most collection work done with one thread─ More than eight to twelve active user threads

─Concurrent collector may not be able to keep up

• Only one or two CPUs─ Concurrent work takes 1 CPU from application

• One sample application:─ Four CPUs, 1GB heap, 20MB young generation─ 100–200 millisecond pauses─ Concurrent work

─About 10–15 seconds per old generation collection─Old generation collections every few minutes

Page 38: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 38

Agenda

Welcome to “GC Today”

Introductions

What’s New in GC

Parallel Collector

Concurrent Collector

Ergonomics

Choosing a Collector

Futures

Questions From “Our Listeners”

Page 39: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 39

Futures

• Enhance ergonomics─ Trade space between generations─ Extend to concurrent collector─ Select collector based on desired behavior

• Parallel old generation collector─ Improve scalability, efficiency

• Garbage collecting old collectors─ Train collector (use concurrent collector)─ Serial collector (let the VM choose)

Page 40: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 40

Command Line Flags

• Select an old generation collector-XX:+UseParallelGC-XX:+UseConcMarkSweepGC-XX:+UseSerialGC

• Request performance characteristics-XX:GCTimeRatio=-XX:MaxGCPauseMillis=

• Change features to suit-Xms, -Xmx-XX:+UseAdaptiveSizePolicy

See the J2SE platform 1.5.0 release notes for details

Page 41: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 41

For More Information

• Meet the Java HotSpot™ VM Development Team (BOF-2520)

• Java™ Platform Performance (TS-1218)

• Performance of Java™ 2 Platform, Standard Edition (J2SE™), Java™ 2 Platform, Enterprise Edition (J2EE™) Web Server, Web Services, and Portals (BOF-1217)

• J2SE 1.4.2 platform GC tuning guide─ http://java.sun.com/docs/hotspot/gc1.4.2/─ An update is planned for J2SE 1.5.0

• J2SE 1.5.0 platform release notes

Page 42: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 42

Agenda

Welcome to “GC Today”

Introductions

What’s New in GC

Parallel Collector

Concurrent Collector

Ergonomics

Choosing a Collector

Futures

Questions From “Our Listeners”

Page 43: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

| 2004 JavaOneSM

Conference | Session 1216 43

Q&A

John CoomesJon MasamitsuPeter Kessler

Page 44: Garbage Collection in the Java HotSpot(tm) Virtual Machine · Point: Low Pause Times • Young generation collections ─ Parallelism reduces pause times • Old generation collections

java.sun.com/javaone/sf

| 2004 JavaOneSM

Conference | Session 1216 44

Garbage Collection in the Java HotSpot™ Virtual MachineChoices and Trade-Offs

Peter KesslerJon MasamitsuJohn CoomesSun Microsystems, Inc.http://www.sun.com