< prev index next >

src/hotspot/share/prims/whitebox.cpp

Print this page
rev 52494 : adding jtreg tests, whitebox api.
rev 52631 : Merge

@@ -80,10 +80,11 @@
 #if INCLUDE_G1GC
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/g1/g1ConcurrentMark.hpp"
 #include "gc/g1/g1ConcurrentMarkThread.hpp"
 #include "gc/g1/heapRegionRemSet.hpp"
+#include "gc/g1/heterogeneousHeapRegionManager.hpp"
 #endif // INCLUDE_G1GC
 #if INCLUDE_PARALLELGC
 #include "gc/parallel/parallelScavengeHeap.inline.hpp"
 #include "gc/parallel/adjoiningGenerations.hpp"
 #endif // INCLUDE_PARALLELGC

@@ -368,10 +369,14 @@
 #endif
   GenCollectedHeap* gch = GenCollectedHeap::heap();
   return !gch->is_in_young(p);
 WB_END
 
+WB_ENTRY(jlong, WB_GetHeapBase(JNIEnv* env, jobject o))
+  return (jlong)Universe::heap()->base();
+WB_END
+
 WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj))
   oop p = JNIHandles::resolve(obj);
   return Universe::heap()->obj_size(p) * HeapWordSize;
 WB_END
 

@@ -495,10 +500,64 @@
     return (jint)HeapRegion::GrainBytes;
   }
   THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1RegionSize: G1 GC is not enabled");
 WB_END
 
+WB_ENTRY(jlong, WB_G1DramReservedStart(JNIEnv* env, jobject o))
+  if (UseG1GC) {
+    G1CollectedHeap* g1h = G1CollectedHeap::heap();
+    if (g1h->is_hetero_heap()) {
+      uint start_region = static_cast<HeterogeneousHeapRegionManager*>(g1h->hrm())->start_index_of_dram();
+      return (jlong)(Universe::heap()->base() + start_region * HeapRegion::GrainBytes);
+    } else {
+      return (jlong)Universe::heap()->base();
+    }
+  }
+  THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1DramReservedStart: G1 GC is not enabled");
+WB_END
+
+WB_ENTRY(jlong, WB_G1DramReservedEnd(JNIEnv* env, jobject o))
+if (UseG1GC) {
+  G1CollectedHeap* g1h = G1CollectedHeap::heap();
+  if (g1h->is_hetero_heap()) {
+    uint end_region = static_cast<HeterogeneousHeapRegionManager*>(g1h->hrm())->end_index_of_dram();
+    return (jlong)(Universe::heap()->base() + (end_region + 1) * HeapRegion::GrainBytes - 1);
+  }
+  else {
+    return (jlong)Universe::heap()->base() + Universe::heap()->collector_policy()->max_heap_byte_size();
+  }
+}
+THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1DramReservedEnd: G1 GC is not enabled");
+WB_END
+
+WB_ENTRY(jlong, WB_G1NvdimmReservedStart(JNIEnv* env, jobject o))
+if (UseG1GC) {
+  G1CollectedHeap* g1h = G1CollectedHeap::heap();
+  if (g1h->is_hetero_heap()) {
+    uint start_region = static_cast<HeterogeneousHeapRegionManager*>(g1h->hrm())->start_index_of_nvdimm();
+    return (jlong)(Universe::heap()->base() + start_region * HeapRegion::GrainBytes);
+  } else {
+    THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NvdimmReservedStart: G1 heap is not heterogeneous");
+  }
+}
+THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NvdimmReservedStart: G1 GC is not enabled");
+WB_END
+
+WB_ENTRY(jlong, WB_G1NvdimmReservedEnd(JNIEnv* env, jobject o))
+if (UseG1GC) {
+  G1CollectedHeap* g1h = G1CollectedHeap::heap();
+  if (g1h->is_hetero_heap()) {
+    uint end_region = static_cast<HeterogeneousHeapRegionManager*>(g1h->hrm())->start_index_of_nvdimm();
+    return (jlong)(Universe::heap()->base() + (end_region + 1) * HeapRegion::GrainBytes - 1);
+  }
+  else {
+    THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NvdimmReservedEnd: G1 heap is not heterogeneous");
+  }
+}
+THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NvdimmReservedEnd: G1 GC is not enabled");
+WB_END
+
 #endif // INCLUDE_G1GC
 
 #if INCLUDE_PARALLELGC
 
 WB_ENTRY(jlong, WB_PSVirtualSpaceAlignment(JNIEnv* env, jobject o))

@@ -2013,10 +2072,11 @@
 #define CC (char*)
 
 static JNINativeMethod methods[] = {
   {CC"getObjectAddress0",                CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress  },
   {CC"getObjectSize0",                   CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectSize     },
+  {CC"getHeapBase",                      CC"()J",                   (void*)&WB_GetHeapBase       },
   {CC"isObjectInOldGen0",                CC"(Ljava/lang/Object;)Z", (void*)&WB_isObjectInOldGen  },
   {CC"getHeapOopSize",                   CC"()I",                   (void*)&WB_GetHeapOopSize    },
   {CC"getVMPageSize",                    CC"()I",                   (void*)&WB_GetVMPageSize     },
   {CC"getVMAllocationGranularity",       CC"()J",                   (void*)&WB_GetVMAllocationGranularity },
   {CC"getVMLargePageSize",               CC"()J",                   (void*)&WB_GetVMLargePageSize},

@@ -2047,10 +2107,14 @@
   {CC"g1BelongsToHumongousRegion0", CC"(J)Z",         (void*)&WB_G1BelongsToHumongousRegion},
   {CC"g1BelongsToFreeRegion0", CC"(J)Z",              (void*)&WB_G1BelongsToFreeRegion},
   {CC"g1NumMaxRegions",    CC"()J",                   (void*)&WB_G1NumMaxRegions  },
   {CC"g1NumFreeRegions",   CC"()J",                   (void*)&WB_G1NumFreeRegions  },
   {CC"g1RegionSize",       CC"()I",                   (void*)&WB_G1RegionSize      },
+  {CC"g1DramReservedStart",   CC"()J",                (void*)&WB_G1DramReservedStart },
+  {CC"g1DramReservedEnd",     CC"()J",                (void*)&WB_G1DramReservedEnd },
+  {CC"g1NvdimmReservedStart", CC"()J",                (void*)&WB_G1NvdimmReservedStart },
+  {CC"g1NvdimmReservedEnd",   CC"()J",                (void*)&WB_G1NvdimmReservedEnd },
   {CC"g1StartConcMarkCycle",       CC"()Z",           (void*)&WB_G1StartMarkCycle  },
   {CC"g1AuxiliaryMemoryUsage", CC"()Ljava/lang/management/MemoryUsage;",
                                                       (void*)&WB_G1AuxiliaryMemoryUsage  },
   {CC"g1GetMixedGCInfo",   CC"(I)[J",                 (void*)&WB_G1GetMixedGCInfo },
 #endif // INCLUDE_G1GC
< prev index next >