aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/prims/whitebox.cpp
diff options
context:
space:
mode:
authortschatzl <none@none>2014-08-21 16:44:41 +0200
committertschatzl <none@none>2014-08-21 16:44:41 +0200
commit21c3560f2adb73fd3da82591c4c03f044ada03f9 (patch)
treef15eaa6365441a525dfaa774a6945a08b61adc61 /src/share/vm/prims/whitebox.cpp
parent5ef9a3d553b4cef8debbf04db2ea631e5e947588 (diff)
downloadjdk8u_hotspot-21c3560f2adb73fd3da82591c4c03f044ada03f9.tar.gz
8055098: WB API should be extended to provide information about size and age of object.
Summary: Extend the WhiteBox API to provide information about the size and age of objects. Further add a mechanism to trigger a young GC. Reviewed-by: tschatzl, sjohanss Contributed-by: Leonid Mesnik <leonid.mesnik@oracle.com>
Diffstat (limited to 'src/share/vm/prims/whitebox.cpp')
-rw-r--r--src/share/vm/prims/whitebox.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/share/vm/prims/whitebox.cpp b/src/share/vm/prims/whitebox.cpp
index 5a3fd3846..97cf61fb8 100644
--- a/src/share/vm/prims/whitebox.cpp
+++ b/src/share/vm/prims/whitebox.cpp
@@ -43,6 +43,7 @@
#include "utilities/exceptions.hpp"
#if INCLUDE_ALL_GCS
+#include "gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp"
#include "gc_implementation/g1/concurrentMark.hpp"
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
#include "gc_implementation/g1/heapRegionRemSet.hpp"
@@ -221,6 +222,30 @@ WB_ENTRY(jint, WB_StressVirtualSpaceResize(JNIEnv* env, jobject o,
(size_t) magnitude, (size_t) iterations);
WB_END
+WB_ENTRY(jboolean, WB_isObjectInOldGen(JNIEnv* env, jobject o, jobject obj))
+ oop p = JNIHandles::resolve(obj);
+#if INCLUDE_ALL_GCS
+ if (UseG1GC) {
+ G1CollectedHeap* g1 = G1CollectedHeap::heap();
+ const HeapRegion* hr = g1->heap_region_containing(p);
+ if (hr == NULL) {
+ return false;
+ }
+ return !(hr->is_young());
+ } else if (UseParallelGC) {
+ ParallelScavengeHeap* psh = ParallelScavengeHeap::heap();
+ return !psh->is_in_young(p);
+ }
+#endif // INCLUDE_ALL_GCS
+ GenCollectedHeap* gch = GenCollectedHeap::heap();
+ return !gch->is_in_young(p);
+WB_END
+
+WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj))
+ oop p = JNIHandles::resolve(obj);
+ return p->size() * HeapWordSize;
+WB_END
+
#if INCLUDE_ALL_GCS
WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
G1CollectedHeap* g1 = G1CollectedHeap::heap();
@@ -668,6 +693,9 @@ WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
Universe::heap()->collect(GCCause::_last_ditch_collection);
WB_END
+WB_ENTRY(void, WB_YoungGC(JNIEnv* env, jobject o))
+ Universe::heap()->collect(GCCause::_wb_young_gc);
+WB_END
WB_ENTRY(void, WB_ReadReservedMemory(JNIEnv* env, jobject o))
// static+volatile in order to force the read to happen
@@ -811,6 +839,8 @@ bool WhiteBox::lookup_bool(const char* field_name, oop object) {
static JNINativeMethod methods[] = {
{CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
+ {CC"getObjectSize", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectSize },
+ {CC"isObjectInOldGen", CC"(Ljava/lang/Object;)Z", (void*)&WB_isObjectInOldGen },
{CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
{CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
{CC"parseCommandLine",
@@ -885,6 +915,7 @@ static JNINativeMethod methods[] = {
(void*)&WB_GetStringVMFlag},
{CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
{CC"fullGC", CC"()V", (void*)&WB_FullGC },
+ {CC"youngGC", CC"()V", (void*)&WB_YoungGC },
{CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
{CC"allocateMetaspace",
CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace },