Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: openjdk/jdk
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 45e68ae2
Choose a base ref
...
head repository: openjdk/jdk
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 83eff9fe
Choose a head ref
  • 19 commits
  • 59 files changed
  • 2 contributors

Commits on Oct 24, 2023

  1. Region pinning in G1/JEP-423

    The JEP covers the idea very well, so I'm only covering some implementation details here:
    
    * regions get a "pin count" (reference count). As long as it is non-zero, we conservatively
      never reclaim that region even if there is no reference in there. JNI code might have
      references to it.
    
    * the JNI spec only requires us to provide pinning support for typeArrays, nothing else.
      This implementation uses this in various ways:
    
      * when evacuating from a pinned region, we evacuate everything live but the typeArrays to
        get more empty regions to clean up later.
    
      * when formatting dead space within pinned regions we use filler objects. Pinned regions
        may be referenced by JNI code only, so we can't overwrite contents of any dead typeArray
        either.
        These dead but referenced typeArrays luckily have the same header size of our filler
        objects, so we can use their headers for our fillers. The problem is that previously
        there has been that restriction that filler objects are half a region size at most, so
        we can end up with the need for placing a filler object header inside a typeArray.
        The code could be clever and handle this situation by splitting the to be filled area
        so that this can't happen, but the solution taken here is allowing filler arrays to
        cover a whole region. They are not referenced by Java code anyway, so there is no harm
        in doing so (i.e. gc code never touches them anyway).
    
    * G1 currently only ever actually evacuates young pinned regions. Old pinned regions of any kind
      are never put into the collection set and automatically skipped. However assuming that the
      pinning is of short length, we put them into the candidates when we can.
    
      * there is the problem that if an applications pins a region for a long time g1 will skip
        evacuating that region over and over. that may lead to issues with the current policy
        in marking regions (only exit mixed phase when there are no marking candidates) and
        just waste of processing time (when the candidate stays in the retained candidates)
    
        The cop-out chosen here is to "age out" the regions from the candidates and wait until
        the next marking happens.
    
        I.e. pinned marking candidates are immediately moved to retained candidates, and if
        in total the region has been pinned for `G1NumCollectionsKeepUnreclaimable` collections
        it is dropped from the candidates. Its current value is fairly random.
    
    * G1 pauses got a new tag if there were pinned regions in the collection set. I.e. in addition
      to something like:
    
    `GC(6) Pause Young (Normal) (Evacuation Failure) 1M->1M(22M) 36.16ms`
    
      there is that new tag `(Pinned)` that indicates that one or more regions that were pinned
      were encountered during gc. E.g.
    
    `GC(6) Pause Young (Normal) (Pinned) (Evacuation Failure) 1M->1M(22M) 36.16ms`
    
      `Pinned` and `Evacuation Failure` tags are not exclusive. GC might have encountered both pinned
      regions and evacuation failed regions in the same collection or even in the same region.
    
    whitespace fixes
    tschatzl authored and Thomas Schatzl committed Oct 24, 2023

    Verified

    This commit was signed with the committer’s verified signature.
    pradyunsg Pradyun Gedam
    Copy the full SHA
    44d430a View commit details
  2. Fix minimal build

    Thomas Schatzl committed Oct 24, 2023

    Verified

    This commit was signed with the committer’s verified signature.
    pradyunsg Pradyun Gedam
    Copy the full SHA
    8b9e9a0 View commit details

Commits on Oct 25, 2023

  1. Fix typo in src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1…

    …/HeapRegion.java so that resourcehogs/serviceability/sa/ClhsdbRegionDetailsScanOopsForG1.java does not fail
    Thomas Schatzl committed Oct 25, 2023

    Verified

    This commit was signed with the committer’s verified signature.
    pradyunsg Pradyun Gedam
    Copy the full SHA
    fddb891 View commit details
  2. Improve somewhat unstable test

    Thomas Schatzl committed Oct 25, 2023
    Copy the full SHA
    b882dd6 View commit details

Commits on Oct 30, 2023

  1. ayang review1

    Thomas Schatzl committed Oct 30, 2023
    Copy the full SHA
    e664639 View commit details
  2. Move tests into gc.g1.pinnedobjs package

    Thomas Schatzl committed Oct 30, 2023
    Copy the full SHA
    1b1d8ba View commit details

Commits on Oct 31, 2023

  1. Improve TestPinnedOldObjectsEvacuation test

    Thomas Schatzl committed Oct 31, 2023
    Copy the full SHA
    78cb9df View commit details
  2. Fix compilation

    Thomas Schatzl committed Oct 31, 2023
    Copy the full SHA
    e5dfbb7 View commit details

Commits on Nov 2, 2023

  1. NULL -> nullptr

    Thomas Schatzl committed Nov 2, 2023
    Copy the full SHA
    fb1deac View commit details
  2. Renamings to (almost) consistently use the following nomenclature for…

    … evacuation failure and types of it:
    
    * evacuation failure is the general concept. It includes
      * pinned regions
      * allocation failure
    
    One region can both be pinned and experience an allocation failure.
    
    G1 GC messages use tags "(Pinned)" and "(Allocation Failure)" now instead of "(Evacuation Failure)"
    
    Did not rename the G1EvacFailureInjector since this adds a lot of noise.
    Thomas Schatzl committed Nov 2, 2023
    Copy the full SHA
    73f61da View commit details
  3. Copy the full SHA
    5ae05e4 View commit details

Commits on Nov 3, 2023

  1. ayang review - renamings + documentation

    Thomas Schatzl committed Nov 3, 2023
    Copy the full SHA
    8342b80 View commit details
  2. typos

    Thomas Schatzl committed Nov 3, 2023
    Copy the full SHA
    f973553 View commit details

Commits on Nov 6, 2023

  1. iwalulya review

    tschatzl committed Nov 6, 2023
    Copy the full SHA
    d0c2c3f View commit details
  2. Merge tag 'jdk-22+21' into 8318706-implementation-of-region-pinning-i…

    …n-g1
    
    Added tag jdk-22+21 for changeset d96f38b
    tschatzl committed Nov 6, 2023
    Copy the full SHA
    251f4d3 View commit details
  3. Merge tag 'jdk-22+22' into 8318706-implementation-of-region-pinning-i…

    …n-g1
    
    Added tag jdk-22+22 for changeset d354141
    tschatzl committed Nov 6, 2023
    Copy the full SHA
    2ad3968 View commit details

Commits on Nov 7, 2023

  1. Fix tests after merge

    tschatzl committed Nov 7, 2023
    Copy the full SHA
    d9ccccf View commit details
  2. Copy the full SHA
    c272a73 View commit details
  3. Copy the full SHA
    83eff9f View commit details
Loading