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

Simplify NOCOOPS requested addresses for archived heap objects

    XMLWordPrintable

Details

    • Enhancement
    • Resolution: Fixed
    • P4
    • 22
    • None
    • hotspot
    • b06

    Description

      If CDS archived heap objects can be loaded at their "requested addresses", we can avoid relocation of their oop fields.

      The calculation of the requested addresses is too complicated with -XX:-UseCompressedOops. We first pick a point close to the top of the *dumptime* heap:

      https://github.com/openjdk/jdk/blob/0c86c31bccd676e1cfbd35898ee16e89d5752688/src/hotspot/share/cds/archiveHeapWriter.cpp#L342

      Then, we find out where this point would be if the *runtime* heap starts at 0x10000000:

      https://github.com/openjdk/jdk/blob/0c86c31bccd676e1cfbd35898ee16e89d5752688/src/hotspot/share/cds/heapShared.cpp#L1695-L1720

      The problem is for -XX:-UseCompressedOops, the word "requested address" has two different meaning (between the two blocks of code referenced above). This difference is not explained in the comments here:

      https://github.com/openjdk/jdk/blob/0c86c31bccd676e1cfbd35898ee16e89d5752688/src/hotspot/share/cds/archiveHeapWriter.hpp#L73

      ==============================
      With -XX:-UseCompressedOops, the OS will randomly pick a range for the runtime heap, so we will always need to relocate anyway. We can greatly simplify the dumping code by writing the first archived heap object at 0x10000000.

      Attachments

        Issue Links

          Activity

            People

              iklam Ioi Lam
              iklam Ioi Lam
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: