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

Make aggregate-data phase concurrent

    Details

    • Type: Enhancement
    • Status: Closed
    • Priority: P3
    • Resolution: Duplicate
    • Affects Version/s: 9
    • Fix Version/s: 10
    • Component/s: hotspot
    • Subcomponent:
      gc

      Description

      Particularly on larger heap the "GC aggregate-data" phase of remark uses up a significant amount of time.

      E.g. take a look at the time spent here in G1 remark with +PrintReferenceGG:

      584.680: #389: [GC remark
        584.680: #389: [Finalize Marking, 0.0110132 secs]
          584.691: #389: [GC ref-proc
            584.691: #389: [SoftReference, 0 refs, 0.0002637 secs]
            584.691: #389: [WeakReference, 206 refs, 0.0003279 secs]
            584.691: #389: [FinalReference, 26 refs, 0.0015083 secs]
            584.693: #389: [PhantomReference, 1 refs, 0.0003140 secs]
            584.693: #389: [JNI Weak Reference, 0.0000502 secs]
          , 0.0025383 secs]
        584.693: #389: [Unloading, 0.0630265 secs]
        584.756: #389: [GC aggregate-data, 0.4297980 secs]
      , 0.5155041 secs]

      Accounting for approximately 80% of the (long) pause.

      Inspecting the code of the GC aggregate-data method, it looks as if this work can be moved to a concurrent phase between Remark and Cleanup.

      Apart from a single addition to a global variable, everything is local.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                tschatzl Thomas Schatzl
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: