G1: Conservative heap alignment does not account for card table constraint

XMLWordPrintable

    • Type: Bug
    • Resolution: Fixed
    • Priority: P4
    • 26
    • Affects Version/s: 26
    • Component/s: hotspot
    • gc
    • master
    • ppc, aarch64

      In JDK-8372150, we've moved around and simplified the GCArguments interface, but we missed to account for the card table constraint in G1's conservative heap alignment calculation.

      Without accounting for the card table constraint, we hit the following assertion:
      # Internal Error (jdk/src/hotspot/share/memory/universe.cpp:975), pid=1851835, tid=1851836
      # assert(alignment <= Arguments::conservative_max_heap_alignment()) failed: actual alignment 67108864 must be within maximum heap alignment 33554432
      in tests which use -XX:GCCardSizeInBytes=1024 and G1 since JDK-8372150. Seems like only G1 is affected.

      V [libjvm.so+0x1f6af84] Universe::reserve_heap(unsigned long, unsigned long, unsigned long)+0x3d4 (universe.cpp:975)
      V [libjvm.so+0xdd0800] G1CollectedHeap::initialize()+0x150 (g1CollectedHeap.cpp:1460)
      V [libjvm.so+0x1f6a598] Universe::initialize_heap()+0xc8 (universe.cpp:962)
      V [libjvm.so+0x1f6a72c] universe_init()+0x11c (universe.cpp:893)
      V [libjvm.so+0x1080430] init_globals()+0xa0 (init.cpp:138)
      V [libjvm.so+0x1f12cac] Threads::create_vm(JavaVMInitArgs*, bool*)+0x3fc (threads.cpp:607)

      Note that page_size=64K on PPC64 which is used without any large page option enabled.

      The change in arguments.cpp‎ doesn't fit to G1's calculate_heap_alignment which still depends on CardTable::ct_max_alignment_constraint().

      Can be reproduced on PPC64 by:
      java -XX:+UnlockDiagnosticVMOptions -XX:GCCardSizeInBytes=1024 -version

            Assignee:
            Joel Sikström
            Reporter:
            Martin Doerr
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: