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