Java Garbage Collection Distilled外文翻译.pdf
文本预览下载声明
Java Garbage Collection Distilled
Serial, Parallel, Concurrent, CMS, G1, Young Gen, New Gen, Old
Gen, Perm Gen, Eden, Tenured, Survivor Spaces, Safepoints, and
the hundreds of JVM startup flags. Does this all baffle you when
trying to tune the garbage collector while trying to get the required
throughput and latency from your Java application? If it does then
do not worry, you are not alone. Documentation describing garbage
collection feels like man pages for an aircraft. Every knob and dial
is detailed and explained but nowhere can you find a guide on how
to fly. This article will attempt to explain the tradeoffs when
choosing and tuning garbage collection algorithms for a particular
workload.
The focus will be on Oracle Hotspot JVM and OpenJDK collectors
as those are the ones in most common usage. Towards the end
other commercial JVMs will be discussed to illustrate alternatives.
The Tradeoffs
Wise folk keep telling us, “You do not get something for nothing”.
When we get something we usually have to give up something in
return. When it comes to garbage collection we play with 3 major
variables that set targets for the collectors:
1. Throughput: The amount of work done by an application
as a ratio of time spent in GC. Target throughput
with-XX:GCTimeRatio=99 ; 99 is the default equating to 1%
GC time.
2. Latency: The time taken by systems in responding to
events which is impacted by pauses introduced by garbage
collection. Target latency for GC pauses
with -XX:MaxGCPauseMillis=n.
3. Memory: The amount of memory our systems use to
store state, which is often copied and moved around when
being managed. The set of active objects retained by the
application at any point in time is known as the Live Set.
Maximum heap size –Xmxn is a tuning parameter for
setting the heap size available to an application.
Note: Often Hotspot cannot ach
显示全部