JDK-7164100 : Throughput collector shows performance regression vs jrockit
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 7u4
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: linux
  • CPU: generic
  • Submitted: 2012-04-24
  • Updated: 2014-04-08
  • Resolved: 2013-11-15
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9Fixed
Related Reports
Relates :  
Description
With equal-sized heaps, most fusion apps are showing a significant performance regression using JDK 7u4 vs jrockit and the default collectors in each VM. While using CMS and G1 can improve the situation for JDK 7u4, the performance requirement is that the (default) throughput collector perform as well as jrockit's default collector. Hence, we are focused here only on the performance of the parallel collectors.

Here is a sampling of data points:
For ADFCRMdemo, jrockit will give an average response time of 0.042; hotspot gives an average response time of 0.064. During the steady state logs for GC, we see this for hotspot:

Minor GC: 26776.82899999998 in 383 collections; avg 69.91339164490856
Full GC: 28875.450000000004 in 8 collections; avg 3609.4312500000005
Average heap after GC: 1539364.75

For jrockit:
Minor GC: 14674.098000000004 in 167 collections; avg 87.86885029940122
Full GC: 8655.18 in 19 collections; avg 455.53578947368425
Average heap after GC: 1811460.5263157894

One difference here is the size of Eden/Young Generations. In hotspot, we are explicitly setting that to Xmn512m (more on that in a bit); in jrockit we let the system determine the size. It would seem that jrockit has selected a bigger eden to do the fewer GCs.

Similarly, for ATG CRMdemo, hotspot gives us a 0.251 response time compared to jrockit's 0.228 second. In this case, the total time in GC for hotspot is actually less than jrockit:
HS Minor GC: 77.501 sec in 987 collections
HS Full GC: 80.341 sec in 30 collections
JR Minor GC: 66.264 sec in 975 collections
JR Full GC: 136.095 sec in 224 collections

The problem here is the really long time that the individual HS full GCs take -- they completely throw the average response times out of whack (in fact, the 90%th response times are less than the average response times, and less than the jrockit 90%th response times). Which is also why we see much better results with CMS and G1GC...

Although these data points indicate that we would probably be better off with a larger eden and smaller old gen (because, as in the case of jrockit, we can tolerate more old GCs if they just last less long to throw off the average), testing has not borne that out, and hence the best results we get are with a 512m new size in hotspot (unlike jrockit).  When we remove the Xmn argument, we will see (for example) a 37% increase in the number of old GC, and while we see only a 22% increase the the total time in old GC, they end up being too frequent. We are continuing to test along those lines, though; perhaps some survivor ratio or other tuning can get us to where the old gc times are not such an issue.

I wonder if the fully-compacting Hotspot vs. not-fully-compacting jrockit full GC issue is the key here? Or are there other possible explanations?

Comments
PSR reports that the regression went away with the fix for JDK-6725714
15-11-2013

Bug DB bug id 16499648
15-03-2013

We are seeing similar issue while performance testing JDeveloper 12c RC3 with HotSpot 7 u10. KPI is Average response time in secs. Here is quick summary of results: JRockit - Avg RT 0.334s HotSpot with 4GB heap - Avg RT 0.973s HotSpot with 5GB heap - Avg RT 0.605s The JVM options with 4GB heap were: JVM options for JRockit: JAVA_OPTIONS="-Djbo.ampool.doampooling=true -Djbo.ampool.initpoolsize=660 -Djbo.ampool.maxpoolsize=792 -Djbo.ampool.maxavailablesize=660 -Djbo.recyclethreshold=660 -Djbo.ampool.timetolive=14400000 -Dweblogic.ProductionModeEnabled=true -DHTTPClient.config.configContextProvider= -Djps.auth.debug=false -Xrs -server -Xms4096m -Xmx4096m -Xns1280m -Xgc:genpar -XlargePages:exitOnFailure=true -Djbo.doconnectionpooling=true -Djbo.txn.disconnect_level=1 -Xverbose:gc -Xverboselog:/scratch/aime1/jdev/Jdev_12c_rc1/user_projects/domains/fod_domain/logs/GC_$1.log -DUSE_JAAS=false -Djps.policystore.hybrid.mode=false -Djps.combiner.optimize.lazyeval=true -Djps.combiner.optimize=true -Djps.auth=ACC " JVM options for HotSpot: JAVA_OPTIONS="-Djbo.ampool.doampooling=true -Djbo.ampool.initpoolsize=660 -Djbo.ampool.maxpoolsize=792 -Djbo.ampool.maxavailablesize=660 -Djbo.recyclethreshold=660 -Djbo.ampool.timetolive=14400000 -Dweblogic.ProductionModeEnabled=true -DHTTPClient.config.configContextProvider= -Djps.auth.debug=false -Djbo.doconnectionpooling=true -Djbo.txn.disconnect_level=1 -DUSE_JAAS=false -Djps.policystore.hybrid.mode=false -Djps.combiner.optimize.lazyeval=true -Djps.combiner.optimize=true -Djps.auth=ACC -Xloggc:/scratch/aime1/jdev/Jdev_12c_rc1/user_projects/domains/fod_domain/logs/GC_$1.log -XX:+PrintGCDetails -Xrs -server -Xms4096m -Xmx4096m -Xmn1280m -XX:+AggressiveOpts -XX:+UseLargePages -XX:PermSize=384m -XX:MaxPermSize=384m -XX:ReservedCodeCacheSize=256m -XX:-DoEscapeAnalysis -XX:+TieredCompilation -XX:StringTableSize=60013" The GC logs are attached. GC seems to be the issue here. Total time in old collection for hotspot is much more than jrockit. Total time in Old Collection: Jrockit: 93104 ms HotSpot (4GB heap): 197275 ms HotSpot (5GB heap): 172104 ms
13-03-2013