Fwd: Reference Processing in G1 remark phase vs. throughput collector

Jason Resch jresch at cleversafe.com
Fri Jun 20 16:51:02 UTC 2014




-------- Original Message --------
Subject: 	Reference Processing in G1 remark phase vs. throughput collector
Date: 	Wed, 18 Jun 2014 14:20:36 -0500
From: 	Jason Resch <jresch at cleversafe.com>
To: 	hotspot-gc-dev at openjdk.java.net <hotspot-gc-dev at openjdk.java.net>



Hello,

We've recently been experimenting with the G1 collector for our 
application, and we noticed something odd with reference processing 
times in the G1. It is not clear to us if this is expected or indicative 
of a bug, but I thought I would mention it to this list to see if there 
is a reasonable explanation for this result.

We are seeing that during the remark phase when non-strong references 
are processed, it takes around 20 times longer than the throughput 
collector spends processing the same number of references.  As an 
example, here is some output for references processing times we observed:

    2014-05-23T19:58:12.805+0000: 11446.605: [GC remark 11446.618: [GC
    ref-proc11446.618: [SoftReference, 0 refs, 0.0040400 secs]11446.622:
    [WeakReference, 11131810 refs, 8.7176900 secs]11455.340:
    [FinalReference, 2273593 refs, 2.0022000 secs]11457.342:
    [PhantomReference, 297950 refs, 0.3004680 secs]11457.643: [JNI Weak
    Reference, 0.0000040 secs], 13.7534950 secs], 13.8035420 secs]


We see the G1 spent 8.7 seconds were spent processing 11 million weak 
references

    2014-05-30T05:57:24.002+0000: 32724.998: [Full GC32726.138:
    [SoftReference, 154 refs, 0.0050380 secs]32726.143: [WeakReference,
    7713339 refs, 0.3449380 secs]32726.488: [FinalReference, 1966941
    refs, 0.1005860 secs]32726.588: [PhantomReference, 650797 refs,
    0.0631680 secs]32726.652: [JNI Weak Reference, 0.0000060 secs]
    [PSYoungGen: 1012137K->0K(14784384K)] [ParOldGen:
    16010001K->5894387K(16384000K)] 17022139K->5894387K(31168384K)
    [PSPermGen: 39256K->39256K(39552K)], 4.3463290 secs] [Times:
    user=98.05 sys=0.00, real=4.35 secs]

While the throughput collector spent 0.34 seconds processing 7.7 million 
weak references


In summary, the G1 collector processed weak references at a rate of 1.27 
million per second, while the throughput collector processed them at 
22.36 million references per second. Is there a fundamental design 
reason that explains why the G1 collector should be so much slower in 
this regard, or might there be ways to improve upon it?


Jason


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-gc-use/attachments/20140620/df4f9b73/attachment.html>


More information about the hotspot-gc-use mailing list