< prev index next >

test/hotspot/jtreg/serviceability/sa/TestG1HeapRegion.java

Print this page
@@ -1,7 +1,7 @@
  /*
-  * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved.
+  * Copyright (c) 2018, 2026, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.

@@ -20,12 +20,14 @@
   * or visit www.oracle.com if you need additional information or have any
   * questions.
   */
  
  import java.util.ArrayList;
+ import java.util.Iterator;
  import java.util.List;
  
+ import sun.jvm.hotspot.debugger.Address;
  import sun.jvm.hotspot.gc.g1.G1CollectedHeap;
  import sun.jvm.hotspot.gc.g1.G1HeapRegion;
  import sun.jvm.hotspot.HotSpotAgent;
  import sun.jvm.hotspot.runtime.VM;
  

@@ -37,15 +39,17 @@
  import jdk.test.lib.SA.SATestUtils;
  import jdk.test.lib.Utils;
  
  /**
   * @test
+  * @bug 8194249
   * @library /test/lib
   * @requires vm.hasSA
   * @requires (os.arch != "riscv64" | !(vm.cpu.features ~= ".*qemu.*"))
   * @requires vm.gc.G1
   * @modules jdk.hotspot.agent/sun.jvm.hotspot
+  *          jdk.hotspot.agent/sun.jvm.hotspot.debugger
   *          jdk.hotspot.agent/sun.jvm.hotspot.gc.g1
   *          jdk.hotspot.agent/sun.jvm.hotspot.memory
   *          jdk.hotspot.agent/sun.jvm.hotspot.runtime
   * @run driver TestG1HeapRegion
   */

@@ -57,16 +61,44 @@
      private static void checkHeapRegion(String pid) throws Exception {
          HotSpotAgent agent = new HotSpotAgent();
  
          try {
              agent.attach(Integer.parseInt(pid));
+ 
              G1CollectedHeap heap = (G1CollectedHeap)VM.getVM().getUniverse().heap();
-             G1HeapRegion hr = heap.hrm().heapRegionIterator().next();
-             G1HeapRegion hrTop = heap.hrm().getByAddress(hr.top());
+             heap.printOn(System.out);
+ 
+             // Print each region first.
+             System.out.println();
+             Iterator<G1HeapRegion> hri  = heap.hrm().heapRegionIterator();
+             G1HeapRegion hr = hri.next();
+             while (hr != null) {
+                 hr.printOn(System.out);
+                 hr = hri.next();
+             }
+             System.out.println();
  
-             Asserts.assertEquals(hr.top(), hrTop.top(),
-                                  "Address of G1HeapRegion does not match.");
+             // Iterate over each region and confirm that getByAddress(top) returns
+             // the same address as the region being looked at.
+             hri  = heap.hrm().heapRegionIterator();
+             hr = hri.next();
+             while (hr != null) {
+                 hr.printOn(System.out);
+                 Address top = hr.top();
+                 if (top.equals(hr.end())) {
+                     // The end of the region is actually the first address after
+                     // the end, so it points to the start of the next region. We need to
+                     // subtract to avoid getByAddress(top) returning the next region.
+                     top = top.addOffsetTo(-1);
+                 }
+                 G1HeapRegion hrTop = heap.hrm().getByAddress(top);
+                 System.out.format("hr.top():0x%x <--> hrTop.top():0x%x\n",
+                                   hr.top().asLongValue(), hrTop.top().asLongValue());
+                 Asserts.assertEquals(hr.top(), hrTop.top(),
+                                      "Address of G1HeapRegion does not match.");
+                 hr = hri.next();
+             }
          } finally {
              agent.detach();
          }
      }
  

@@ -74,10 +106,11 @@
                                                           throws Exception {
          // Start a new process to attach to the lingered app
          ProcessBuilder processBuilder = ProcessTools.createLimitedTestJavaProcessBuilder(
              "--add-modules=jdk.hotspot.agent",
              "--add-exports=jdk.hotspot.agent/sun.jvm.hotspot=ALL-UNNAMED",
+             "--add-exports=jdk.hotspot.agent/sun.jvm.hotspot.debugger=ALL-UNNAMED",
              "--add-exports=jdk.hotspot.agent/sun.jvm.hotspot.gc.g1=ALL-UNNAMED",
              "--add-exports=jdk.hotspot.agent/sun.jvm.hotspot.memory=ALL-UNNAMED",
              "--add-exports=jdk.hotspot.agent/sun.jvm.hotspot.runtime=ALL-UNNAMED",
              "TestG1HeapRegion",
              Long.toString(lingeredAppPid));
< prev index next >