comparison src/share/vm/prims/whitebox.cpp @ 17867:b127b0d6de7f

8039597: WhiteBox :: clean type profiling data Reviewed-by: kvn, roland
author iignatyev
date Wed, 09 Apr 2014 22:37:37 +0400
parents 4abb719c5620
children 78bbf4d43a14
comparison
equal deleted inserted replaced
17846:58fab66a8297 17867:b127b0d6de7f
436 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD); 436 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD);
437 MutexLockerEx mu(Compile_lock); 437 MutexLockerEx mu(Compile_lock);
438 return (mh->queued_for_compilation() || nm != NULL); 438 return (mh->queued_for_compilation() || nm != NULL);
439 WB_END 439 WB_END
440 440
441 class VM_WhiteBoxOperation : public VM_Operation {
442 public:
443 VM_WhiteBoxOperation() { }
444 VMOp_Type type() const { return VMOp_WhiteBoxOperation; }
445 bool allow_nested_vm_operations() const { return true; }
446 };
447
448 class AlwaysFalseClosure : public BoolObjectClosure {
449 public:
450 bool do_object_b(oop p) { return false; }
451 };
452
453 static AlwaysFalseClosure always_false;
454
455 class VM_WhiteBoxCleanMethodData : public VM_WhiteBoxOperation {
456 public:
457 VM_WhiteBoxCleanMethodData(MethodData* mdo) : _mdo(mdo) { }
458 void doit() {
459 _mdo->clean_method_data(&always_false);
460 }
461 private:
462 MethodData* _mdo;
463 };
464
441 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method)) 465 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method))
442 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 466 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
443 CHECK_JNI_EXCEPTION(env); 467 CHECK_JNI_EXCEPTION(env);
444 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 468 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
445 MutexLockerEx mu(Compile_lock); 469 MutexLockerEx mu(Compile_lock);
451 ResourceMark rm; 475 ResourceMark rm;
452 int arg_count = mdo->method()->size_of_parameters(); 476 int arg_count = mdo->method()->size_of_parameters();
453 for (int i = 0; i < arg_count; i++) { 477 for (int i = 0; i < arg_count; i++) {
454 mdo->set_arg_modified(i, 0); 478 mdo->set_arg_modified(i, 0);
455 } 479 }
480 VM_WhiteBoxCleanMethodData op(mdo);
481 VMThread::execute(&op);
456 } 482 }
457 483
458 mh->clear_not_c1_compilable(); 484 mh->clear_not_c1_compilable();
459 mh->clear_not_c2_compilable(); 485 mh->clear_not_c2_compilable();
460 mh->clear_not_c2_osr_compilable(); 486 mh->clear_not_c2_osr_compilable();