149 WB_END
150
151 WB_ENTRY(void, WB_AddToSystemClassLoaderSearch(JNIEnv* env, jobject o, jstring segment)) {
152 #if INCLUDE_JVMTI
153 ResourceMark rm;
154 const char* seg = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(segment));
155 JvmtiEnv* jvmti_env = JvmtiEnv::create_a_jvmti(JVMTI_VERSION);
156 jvmtiError err = jvmti_env->AddToSystemClassLoaderSearch(seg);
157 assert(err == JVMTI_ERROR_NONE, "must not fail");
158 #endif
159 }
160 WB_END
161
162
163 WB_ENTRY(jlong, WB_GetCompressedOopsMaxHeapSize(JNIEnv* env, jobject o)) {
164 return (jlong)Arguments::max_heap_for_compressed_oops();
165 }
166 WB_END
167
168 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
169 CollectorPolicy * p = Universe::heap()->collector_policy();
170 tty->print_cr("Minimum heap " SIZE_FORMAT " Initial heap "
171 SIZE_FORMAT " Maximum heap " SIZE_FORMAT " Space alignment " SIZE_FORMAT " Heap alignment " SIZE_FORMAT,
172 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
173 p->space_alignment(), p->heap_alignment());
174 }
175 WB_END
176
177 #ifndef PRODUCT
178 // Forward declaration
179 void TestReservedSpace_test();
180 void TestReserveMemorySpecial_test();
181 void TestVirtualSpace_test();
182 void TestMetaspaceAux_test();
183 #endif
184
185 WB_ENTRY(void, WB_RunMemoryUnitTests(JNIEnv* env, jobject o))
186 #ifndef PRODUCT
187 TestReservedSpace_test();
188 TestReserveMemorySpecial_test();
189 TestVirtualSpace_test();
331 const HeapRegion* hr = g1->heap_region_containing(p);
332 if (hr == NULL) {
333 return false;
334 }
335 return !(hr->is_young());
336 } else if (UseParallelGC) {
337 ParallelScavengeHeap* psh = ParallelScavengeHeap::heap();
338 return !psh->is_in_young(p);
339 }
340 #endif // INCLUDE_ALL_GCS
341 GenCollectedHeap* gch = GenCollectedHeap::heap();
342 return !gch->is_in_young(p);
343 WB_END
344
345 WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj))
346 oop p = JNIHandles::resolve(obj);
347 return p->size() * HeapWordSize;
348 WB_END
349
350 WB_ENTRY(jlong, WB_GetHeapSpaceAlignment(JNIEnv* env, jobject o))
351 size_t alignment = Universe::heap()->collector_policy()->space_alignment();
352 return (jlong)alignment;
353 WB_END
354
355 WB_ENTRY(jlong, WB_GetHeapAlignment(JNIEnv* env, jobject o))
356 size_t alignment = Universe::heap()->collector_policy()->heap_alignment();
357 return (jlong)alignment;
358 WB_END
359
360 #if INCLUDE_ALL_GCS
361 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
362 if (UseG1GC) {
363 G1CollectedHeap* g1 = G1CollectedHeap::heap();
364 oop result = JNIHandles::resolve(obj);
365 const HeapRegion* hr = g1->heap_region_containing(result);
366 return hr->is_humongous();
367 }
368 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1IsHumongous: G1 GC is not enabled");
369 WB_END
370
371 WB_ENTRY(jboolean, WB_G1BelongsToHumongousRegion(JNIEnv* env, jobject o, jlong addr))
372 if (UseG1GC) {
373 G1CollectedHeap* g1 = G1CollectedHeap::heap();
374 const HeapRegion* hr = g1->heap_region_containing((void*) addr);
375 return hr->is_humongous();
376 }
1147
1148 WB_ENTRY(void, WB_UnlockCompilation(JNIEnv* env, jobject o))
1149 MonitorLockerEx mo(Compilation_lock, Mutex::_no_safepoint_check_flag);
1150 WhiteBox::compilation_locked = false;
1151 mo.notify_all();
1152 WB_END
1153
1154 WB_ENTRY(void, WB_ForceNMethodSweep(JNIEnv* env, jobject o))
1155 // Force a code cache sweep and block until it finished
1156 NMethodSweeper::force_sweep();
1157 WB_END
1158
1159 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString))
1160 ResourceMark rm(THREAD);
1161 int len;
1162 jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len, CHECK_false);
1163 return (StringTable::lookup(name, len) != NULL);
1164 WB_END
1165
1166 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
1167 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true);
1168 Universe::heap()->collect(GCCause::_wb_full_gc);
1169 #if INCLUDE_ALL_GCS
1170 if (UseG1GC) {
1171 // Needs to be cleared explicitly for G1
1172 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(false);
1173 }
1174 #endif // INCLUDE_ALL_GCS
1175 WB_END
1176
1177 WB_ENTRY(void, WB_YoungGC(JNIEnv* env, jobject o))
1178 Universe::heap()->collect(GCCause::_wb_young_gc);
1179 WB_END
1180
1181 WB_ENTRY(void, WB_ReadReservedMemory(JNIEnv* env, jobject o))
1182 // static+volatile in order to force the read to happen
1183 // (not be eliminated by the compiler)
1184 static char c;
1185 static volatile char* p;
1186
1187 p = os::reserve_memory(os::vm_allocation_granularity(), NULL, 0);
1188 if (p == NULL) {
1189 THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(), "Failed to reserve memory");
1190 }
1191
1192 c = *p;
1193 WB_END
1194
1195 WB_ENTRY(jstring, WB_GetCPUFeatures(JNIEnv* env, jobject o))
1196 const char* features = VM_Version::features_string();
1197 ThreadToNativeFromVM ttn(thread);
1198 jstring features_string = env->NewStringUTF(features);
|
149 WB_END
150
151 WB_ENTRY(void, WB_AddToSystemClassLoaderSearch(JNIEnv* env, jobject o, jstring segment)) {
152 #if INCLUDE_JVMTI
153 ResourceMark rm;
154 const char* seg = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(segment));
155 JvmtiEnv* jvmti_env = JvmtiEnv::create_a_jvmti(JVMTI_VERSION);
156 jvmtiError err = jvmti_env->AddToSystemClassLoaderSearch(seg);
157 assert(err == JVMTI_ERROR_NONE, "must not fail");
158 #endif
159 }
160 WB_END
161
162
163 WB_ENTRY(jlong, WB_GetCompressedOopsMaxHeapSize(JNIEnv* env, jobject o)) {
164 return (jlong)Arguments::max_heap_for_compressed_oops();
165 }
166 WB_END
167
168 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
169 CollectorPolicy * p = GC::gc()->heap()->collector_policy();
170 tty->print_cr("Minimum heap " SIZE_FORMAT " Initial heap "
171 SIZE_FORMAT " Maximum heap " SIZE_FORMAT " Space alignment " SIZE_FORMAT " Heap alignment " SIZE_FORMAT,
172 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
173 p->space_alignment(), p->heap_alignment());
174 }
175 WB_END
176
177 #ifndef PRODUCT
178 // Forward declaration
179 void TestReservedSpace_test();
180 void TestReserveMemorySpecial_test();
181 void TestVirtualSpace_test();
182 void TestMetaspaceAux_test();
183 #endif
184
185 WB_ENTRY(void, WB_RunMemoryUnitTests(JNIEnv* env, jobject o))
186 #ifndef PRODUCT
187 TestReservedSpace_test();
188 TestReserveMemorySpecial_test();
189 TestVirtualSpace_test();
331 const HeapRegion* hr = g1->heap_region_containing(p);
332 if (hr == NULL) {
333 return false;
334 }
335 return !(hr->is_young());
336 } else if (UseParallelGC) {
337 ParallelScavengeHeap* psh = ParallelScavengeHeap::heap();
338 return !psh->is_in_young(p);
339 }
340 #endif // INCLUDE_ALL_GCS
341 GenCollectedHeap* gch = GenCollectedHeap::heap();
342 return !gch->is_in_young(p);
343 WB_END
344
345 WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj))
346 oop p = JNIHandles::resolve(obj);
347 return p->size() * HeapWordSize;
348 WB_END
349
350 WB_ENTRY(jlong, WB_GetHeapSpaceAlignment(JNIEnv* env, jobject o))
351 size_t alignment = GC::gc()->heap()->collector_policy()->space_alignment();
352 return (jlong)alignment;
353 WB_END
354
355 WB_ENTRY(jlong, WB_GetHeapAlignment(JNIEnv* env, jobject o))
356 size_t alignment = GC::gc()->heap()->collector_policy()->heap_alignment();
357 return (jlong)alignment;
358 WB_END
359
360 #if INCLUDE_ALL_GCS
361 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
362 if (UseG1GC) {
363 G1CollectedHeap* g1 = G1CollectedHeap::heap();
364 oop result = JNIHandles::resolve(obj);
365 const HeapRegion* hr = g1->heap_region_containing(result);
366 return hr->is_humongous();
367 }
368 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1IsHumongous: G1 GC is not enabled");
369 WB_END
370
371 WB_ENTRY(jboolean, WB_G1BelongsToHumongousRegion(JNIEnv* env, jobject o, jlong addr))
372 if (UseG1GC) {
373 G1CollectedHeap* g1 = G1CollectedHeap::heap();
374 const HeapRegion* hr = g1->heap_region_containing((void*) addr);
375 return hr->is_humongous();
376 }
1147
1148 WB_ENTRY(void, WB_UnlockCompilation(JNIEnv* env, jobject o))
1149 MonitorLockerEx mo(Compilation_lock, Mutex::_no_safepoint_check_flag);
1150 WhiteBox::compilation_locked = false;
1151 mo.notify_all();
1152 WB_END
1153
1154 WB_ENTRY(void, WB_ForceNMethodSweep(JNIEnv* env, jobject o))
1155 // Force a code cache sweep and block until it finished
1156 NMethodSweeper::force_sweep();
1157 WB_END
1158
1159 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString))
1160 ResourceMark rm(THREAD);
1161 int len;
1162 jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len, CHECK_false);
1163 return (StringTable::lookup(name, len) != NULL);
1164 WB_END
1165
1166 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
1167 GC::gc()->heap()->collector_policy()->set_should_clear_all_soft_refs(true);
1168 GC::gc()->heap()->collect(GCCause::_wb_full_gc);
1169 #if INCLUDE_ALL_GCS
1170 if (UseG1GC) {
1171 // Needs to be cleared explicitly for G1
1172 GC::gc()->heap()->collector_policy()->set_should_clear_all_soft_refs(false);
1173 }
1174 #endif // INCLUDE_ALL_GCS
1175 WB_END
1176
1177 WB_ENTRY(void, WB_YoungGC(JNIEnv* env, jobject o))
1178 GC::gc()->heap()->collect(GCCause::_wb_young_gc);
1179 WB_END
1180
1181 WB_ENTRY(void, WB_ReadReservedMemory(JNIEnv* env, jobject o))
1182 // static+volatile in order to force the read to happen
1183 // (not be eliminated by the compiler)
1184 static char c;
1185 static volatile char* p;
1186
1187 p = os::reserve_memory(os::vm_allocation_granularity(), NULL, 0);
1188 if (p == NULL) {
1189 THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(), "Failed to reserve memory");
1190 }
1191
1192 c = *p;
1193 WB_END
1194
1195 WB_ENTRY(jstring, WB_GetCPUFeatures(JNIEnv* env, jobject o))
1196 const char* features = VM_Version::features_string();
1197 ThreadToNativeFromVM ttn(thread);
1198 jstring features_string = env->NewStringUTF(features);
|