Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8079128

ParNewGC times doubled from Java SE 6 to Java SE 9

    Details

    • Type: Enhancement
    • Status: Open
    • Priority: P2
    • Resolution: Unresolved
    • Affects Version/s: 8u45, 9
    • Fix Version/s: 10
    • Component/s: hotspot
    • Subcomponent:
      gc
    • CPU:
      x86
    • OS:
      solaris

      Description

      In a proprietary application, minor collections (ParNewGC+CMS) are considerably slower
      in Java SE 8/Java SE 9 than in Java SE 6.

      In an identical environment, Java SE 6 ParNewGC takes less than 3 msec,
      while Java SE 8 ParNewGC or Java SE 9 ParNewGC take about 6-7 msec.

      Environment used: SUN FIRE X4170 M2, 24 cpus, Solaris 10 x64 144489-05

      Experimental results using a demo application:

       6u91 ParNewGC ParallelCMSThreads=1: 0.00263 sec (base line)
       7u76 ParNewGC ParallelCMSThreads=1: 0.00652 sec (+ 147 %)
       7u76 ParNewGC ParallelCMSThreads=1 +BlockOffsetArrayUseUnallocatedBlock : 0.00462 sec (+ 76 %)
       7u76 ParNewGC ParallelCMSThreads=1 +BlockOffsetArrayUseUnallocatedBlock +JavaObjectsInPerm: 0.00389 sec (+ 48 %)
       7u76 ParNewGC ParallelCMSThreads=1 +BlockOffsetArrayUseUnallocatedBlock +JavaObjectsInPerm ParGCCardsPerStrideChunk=4096: 0.00338 sec (+ 29 %)
       7u76 ParNewGC ParallelCMSThreads=16 +BlockOffsetArrayUseUnallocatedBlock +JavaObjectsInPerm ParGCCardsPerStrideChunk=4096: 0.00354 sec (+ 35 %)
       8u45 ParNewGC ConcGCThreads=1: 0.00600 sec (+ 128 %)
       8u45 ParNewGC ConcGCThreads=16: 0.00578 sec (+ 120 %)
       8u45 ParNewGC ConcGCThreads=1 +BlockOffsetArrayUseUnallocatedBlock: 0.00725 sec (+ 176 %)
       8u45 ParNewGC ConcGCThreads=16 +BlockOffsetArrayUseUnallocatedBlock: 0.00409 sec (+ 56 %)
       8u45 ParNewGC ConcGCThreads=1 +BlockOffsetArrayUseUnallocatedBlock ParGCCardsPerStrideChunk=4096: 0.00391 sec (+ 49 %)
       9b61 ParNewGC ConcGCThreads=1: 0.00608 sec (+ 131 %)
       9b61 ParNewGC ConcGCThreads=1 +BlockOffsetArrayUseUnallocatedBlock: 0.00474 sec (+ 80 %)
       9b61 ParNewGC ConcGCThreads=1 +BlockOffsetArrayUseUnallocatedBlock ParGCCardsPerStrideChunk=4096: 0.00547 sec (+ 108 %)
       9b61 ParNewGC ConcGCThreads=16 +BlockOffsetArrayUseUnallocatedBlock: 0.00524 sec (+ 99%)

      The following Java SE software was used:

      Java HotSpot(TM) 64-Bit Server VM (20.101-b01 for solaris-amd64 JRE (1.6.0_91-b14)
      Java HotSpot(TM) 64-Bit Server VM (24.76-b04) for solaris-amd64 JRE (1.7.0_76-b13)
      Java HotSpot(TM) 64-Bit Server VM (25.45-b02) for solaris-amd64 JRE (1.8.0_45-b14)
      Java HotSpot(TM) 64-Bit Server VM (1.9.0-ea-b61) for solaris-amd64 JRE (1.9.0-ea-b61)

        Issue Links

          Activity

          Hide
          thlenz Thomas Lenz (Inactive) added a comment -
          The behaviour is reproducible. A demo application is available.

          ParNewGC is used in combination with the 'Concurrent Low Pause Collector' (CMS).
          Playing with -XX:ConcGCThreads=<n> did improve performance.

          The following flags helped improve performance in Java SE 7:
          +BlockOffsetArrayUseUnallocatedBlock +JavaObjectsInPerm ParGCCardsPerStrideChunk

          The following flags helped improve performance in Java SE 9:
          +BlockOffsetArrayUseUnallocatedBlock ParGCCardsPerStrideChunk

          The following flags helped improve performance in Java SE 9:
          +BlockOffsetArrayUseUnallocatedBlock
          Show
          thlenz Thomas Lenz (Inactive) added a comment - The behaviour is reproducible. A demo application is available. ParNewGC is used in combination with the 'Concurrent Low Pause Collector' (CMS). Playing with -XX:ConcGCThreads=<n> did improve performance. The following flags helped improve performance in Java SE 7: +BlockOffsetArrayUseUnallocatedBlock +JavaObjectsInPerm ParGCCardsPerStrideChunk The following flags helped improve performance in Java SE 9: +BlockOffsetArrayUseUnallocatedBlock ParGCCardsPerStrideChunk The following flags helped improve performance in Java SE 9: +BlockOffsetArrayUseUnallocatedBlock
          Hide
          thlenz Thomas Lenz (Inactive) added a comment -
          The data (GC log) was evaluated the following way:

          % grep ParNew SLOW_GC_DEMO_screener_0_gc.j6.log | tail -100 | awk '{print $11}' | wc
                86 86 860
          % grep ParNew SLOW_GC_DEMO_screener_0_gc.j6.log | tail -50 | awk '{print $11}' | awk '{sum += $1} END {printf( "SUM: %f\n", sum)}'
          SUM: 0.131453

          0.131453 / 50 = 0.00263
          Show
          thlenz Thomas Lenz (Inactive) added a comment - The data (GC log) was evaluated the following way: % grep ParNew SLOW_GC_DEMO_screener_0_gc.j6.log | tail -100 | awk '{print $11}' | wc       86 86 860 % grep ParNew SLOW_GC_DEMO_screener_0_gc.j6.log | tail -50 | awk '{print $11}' | awk '{sum += $1} END {printf( "SUM: %f\n", sum)}' SUM: 0.131453 0.131453 / 50 = 0.00263

            People

            • Assignee:
              Unassigned
              Reporter:
              thlenz Thomas Lenz (Inactive)
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated: