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

JEP 365: ZGC on Windows (Experimental)

XMLWordPrintable

    • Stefan Karlsson
    • Feature
    • Open
    • gc
    • Implementation
    • hotspot dash gc dash dev at openjdk dot java dot net
    • S
    • S
    • 365

      Summary

      Port the ZGC garbage collector to Windows.

      Non-Goals

      It is not a goal to support Windows 10 and Windows Server older than version 1803, since older versions lack the required API for placeholder memory reservations.

      Description

      Most of the ZGC code base is platform independent and requires no Windows-specific changes. The existing load barrier support for x64 is operating-system agnostic and can also be used on Windows. The platform specific code that needs to be ported relates to how address space is reserved and how physical memory is mapped into a reserved address space. The Windows API for memory management differs from the POSIX API and is less flexible in some ways.

      The Windows implementation of ZGC requires the following work:

      • Support for multi-mapping memory. ZGC's use of colored pointers requires support for heap multi-mapping, so that the same physical memory can be accessed from multiple different locations in the process address space. On Windows, paging-file backed memory provides physical memory with an identity (a handle), which is unrelated to the virtual address where it is mapped. Using this identity allows ZGC to map the same physical memory into multiple locations.

      • Support for mapping paging-file backed memory into a reserved address space. The Windows memory management API is not as flexible as POSIX's mmap/munmap, especially when it comes to mapping file backed memory into a previously reserved address space region. To do this, ZGC will use the Windows concept of address space placeholders. The placeholder concept was introduced in version 1803 of Windows 10 and Windows Server. ZGC support for older versions of Windows will not be implemented.

      • Support for mapping and unmapping arbitrary parts of the heap. ZGC's heap layout in combination with its dynamic sizing (and re-sizing) of heap pages requires support for mapping and unmapping arbitrary heap granules. This requirement in combination with Windows address space placeholders requires special attention, since placeholders must be explicitly split/coalesced by the program, as opposed to being automatically split/coalesced by the operating system (as on Linux).

      • Support for committing and uncommitting arbitrary parts of the heap. ZGC can commit and uncommit physical memory dynamically while the Java program is running. To support these operations the physical memory will be divided into, and backed by, multiple paging-file segments. Each paging-file segment corresponds to a ZGC heap granule, and can be committed and uncommitted independently of other segments.

      Testing

      The tests that usually run for ZGC on Linux will be run for Windows too.

      Dependencies

      The following changes to shared code are prerequisites:

      • 8232601: ZGC: Parameterize the ZGranuleMap table size
      • 8232602: ZGC: Make ZGranuleMap ZAddress agnostic
      • 8232604: ZGC: Make ZVerifyViews mapping and unmapping precise
      • 8232648: ZGC: Move ATTRIBUTE_ALIGNED to the front of declarations
      • 8232649: ZGC: Add callbacks to ZMemoryManager
      • 8232650: ZGC: Add initialization hooks for OS specific code
      • 8232651: Add implementation of os::processor_id() for Windows

            stefank Stefan Karlsson
            stefank Stefan Karlsson
            Stefan Karlsson Stefan Karlsson
            Mikael Vidstedt, Per Liden (Inactive)
            Mikael Vidstedt
            Votes:
            1 Vote for this issue
            Watchers:
            10 Start watching this issue

              Created:
              Updated:
              Resolved: