src/share/vm/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/prims/whitebox.cpp	Fri Nov 14 16:56:35 2014
--- new/src/share/vm/prims/whitebox.cpp	Fri Nov 14 16:56:35 2014

*** 42,51 **** --- 42,52 ---- #include "runtime/deoptimization.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/os.hpp" #include "runtime/vm_version.hpp" #include "runtime/sweeper.hpp" + #include "runtime/javaCalls.hpp" #include "utilities/array.hpp" #include "utilities/debug.hpp" #include "utilities/macros.hpp" #include "utilities/exceptions.hpp"
*** 740,760 **** --- 741,794 ---- MonitorLockerEx mo(Compilation_lock, Mutex::_no_safepoint_check_flag); WhiteBox::compilation_locked = false; mo.notify_all(); WB_END ! void WhiteBox::force_sweep() { ! void WhiteBox::sweeper_thread_entry(JavaThread* thread, TRAPS) { guarantee(WhiteBoxAPI, "internal testing API :: WhiteBox has to enabled"); { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); NMethodSweeper::_should_sweep = true; } NMethodSweeper::possibly_sweep(); } WB_ENTRY(void, WB_ForceNMethodSweep(JNIEnv* env, jobject o)) ! WhiteBox::force_sweep(); + JavaThread* WhiteBox::create_sweeper_thread(TRAPS) { ! Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL); + instanceKlassHandle klass(THREAD, k); + instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_NULL); + Handle string = java_lang_String::create_from_str("WB Sweeper thread", CHECK_NULL); + + CodeCacheSweeperThread* sweeper_thread = new CodeCacheSweeperThread(); + sweeper_thread->set_entry_point(&WhiteBox::sweeper_thread_entry); + JavaValue result(T_VOID); + JavaCalls::call_special(&result, thread_oop, + klass, + vmSymbols::object_initializer_name(), + vmSymbols::string_void_signature(), + string, + CHECK_NULL); + { + MutexLocker mu(Threads_lock, THREAD); + java_lang_Thread::set_thread(thread_oop(), sweeper_thread); + if (java_lang_Thread::is_daemon(JavaThread::current()->threadObj())) { + java_lang_Thread::set_daemon(thread_oop()); + } + sweeper_thread->set_threadObj(thread_oop()); + Threads::add(sweeper_thread); + Thread::start(sweeper_thread); + } + return sweeper_thread; + } + + WB_ENTRY(jobject, WB_ForceNMethodSweep(JNIEnv* env, jobject o)) + JavaThread* sweeper_thread = WhiteBox::create_sweeper_thread(JavaThread::current()); + if (sweeper_thread == NULL) { + return NULL; + } + jobject result = JNIHandles::make_local(env, sweeper_thread->threadObj()); + return result; WB_END WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString)) ResourceMark rm(THREAD); int len;
*** 890,903 **** --- 924,937 ---- full_size += round_to(size - full_size, oopSize); } { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); blob = (BufferBlob*) CodeCache::allocate(full_size, blob_type); + ::new (blob) BufferBlob("WB::DummyBlob", full_size); } // Track memory usage statistic after releasing CodeCache_lock MemoryService::track_code_cache_memory_usage(); ::new (blob) BufferBlob("WB::DummyBlob", full_size); return blob; } WB_ENTRY(jlong, WB_AllocateCodeBlob(JNIEnv* env, jobject o, jint size, jint blob_type)) return (jlong) WhiteBox::allocate_code_blob(size, blob_type);
*** 1188,1198 **** --- 1222,1232 ---- {CC"incMetaspaceCapacityUntilGC", CC"(J)J", (void*)&WB_IncMetaspaceCapacityUntilGC }, {CC"metaspaceCapacityUntilGC", CC"()J", (void*)&WB_MetaspaceCapacityUntilGC }, {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures }, {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;", (void*)&WB_GetNMethod }, ! {CC"forceNMethodSweep", CC"()V", (void*)&WB_ForceNMethodSweep }, ! {CC"forceNMethodSweep0", CC"()Ljava/lang/Thread;", (void*)&WB_ForceNMethodSweep }, {CC"allocateCodeBlob", CC"(II)J", (void*)&WB_AllocateCodeBlob }, {CC"freeCodeBlob", CC"(J)V", (void*)&WB_FreeCodeBlob }, {CC"getCodeHeapEntries", CC"(I)[Ljava/lang/Object;",(void*)&WB_GetCodeHeapEntries }, {CC"getThreadStackSize", CC"()J", (void*)&WB_GetThreadStackSize }, {CC"getThreadRemainingStackSize", CC"()J", (void*)&WB_GetThreadRemainingStackSize },

src/share/vm/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File