35 |
35 |
36 #include "runtime/interfaceSupport.hpp" |
36 #include "runtime/interfaceSupport.hpp" |
37 #include "runtime/os.hpp" |
37 #include "runtime/os.hpp" |
38 #include "utilities/debug.hpp" |
38 #include "utilities/debug.hpp" |
39 #include "utilities/macros.hpp" |
39 #include "utilities/macros.hpp" |
|
40 #include "utilities/exceptions.hpp" |
40 |
41 |
41 #if INCLUDE_ALL_GCS |
42 #if INCLUDE_ALL_GCS |
42 #include "gc_implementation/g1/concurrentMark.hpp" |
43 #include "gc_implementation/g1/concurrentMark.hpp" |
43 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" |
44 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" |
44 #include "gc_implementation/g1/heapRegionRemSet.hpp" |
45 #include "gc_implementation/g1/heapRegionRemSet.hpp" |
328 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true); |
329 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true); |
329 Universe::heap()->collect(GCCause::_last_ditch_collection); |
330 Universe::heap()->collect(GCCause::_last_ditch_collection); |
330 WB_END |
331 WB_END |
331 |
332 |
332 |
333 |
333 WB_ENTRY(jlong, WB_ReserveMemory(JNIEnv* env, jobject o, jlong size)) |
334 WB_ENTRY(void, WB_ReadReservedMemory(JNIEnv* env, jobject o)) |
334 return (jlong)os::reserve_memory(size, NULL, 0); |
335 // static+volatile in order to force the read to happen |
|
336 // (not be eliminated by the compiler) |
|
337 static char c; |
|
338 static volatile char* p; |
|
339 |
|
340 p = os::reserve_memory(os::vm_allocation_granularity(), NULL, 0); |
|
341 if (p == NULL) { |
|
342 THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(), "Failed to reserve memory"); |
|
343 } |
|
344 |
|
345 c = *p; |
335 WB_END |
346 WB_END |
336 |
347 |
337 //Some convenience methods to deal with objects from java |
348 //Some convenience methods to deal with objects from java |
338 int WhiteBox::offset_for_field(const char* field_name, oop object, |
349 int WhiteBox::offset_for_field(const char* field_name, oop object, |
339 Symbol* signature_symbol) { |
350 Symbol* signature_symbol) { |
435 {CC"clearMethodState", |
446 {CC"clearMethodState", |
436 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState}, |
447 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState}, |
437 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, |
448 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, |
438 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, |
449 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, |
439 |
450 |
440 {CC"reserveMemory", CC"(J)J", (void*)&WB_ReserveMemory }, |
451 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory }, |
441 }; |
452 }; |
442 |
453 |
443 #undef CC |
454 #undef CC |
444 |
455 |
445 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass)) |
456 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass)) |