81 82 TEST_VM(markWord, printing) { 83 JavaThread* THREAD = JavaThread::current(); 84 ThreadInVMfromNative invm(THREAD); 85 ResourceMark rm(THREAD); 86 87 oop obj = SystemDictionary::Byte_klass()->allocate_instance(THREAD); 88 89 FlagSetting fs(WizardMode, true); 90 FlagSetting bf(UseBiasedLocking, true); 91 92 HandleMark hm(THREAD); 93 Handle h_obj(THREAD, obj); 94 95 // Biased locking is initially enabled for this java.lang.Byte object. 96 assert_test_pattern(h_obj, "is_biased"); 97 98 // Lock using biased locking. 99 BasicObjectLock lock; 100 lock.set_obj(obj); 101 markWord mark = obj->mark().incr_bias_epoch(); 102 obj->set_mark(mark); 103 ObjectSynchronizer::fast_enter(h_obj, lock.lock(), true, THREAD); 104 // Look for the biased_locker in markWord, not prototype_header. 105 #ifdef _LP64 106 assert_not_test_pattern(h_obj, "mark(is_biased biased_locker=0x0000000000000000"); 107 #else 108 assert_not_test_pattern(h_obj, "mark(is_biased biased_locker=0x00000000"); 109 #endif 110 111 // Same thread tries to lock it again. 112 { 113 ObjectLocker ol(h_obj, THREAD); 114 assert_test_pattern(h_obj, "locked"); 115 } 116 117 // This is no longer biased, because ObjectLocker revokes the bias. 118 assert_test_pattern(h_obj, "is_neutral no_hash"); 119 120 // Wait gets the lock inflated. 121 { 122 ObjectLocker ol(h_obj, THREAD); 123 | 81 82 TEST_VM(markWord, printing) { 83 JavaThread* THREAD = JavaThread::current(); 84 ThreadInVMfromNative invm(THREAD); 85 ResourceMark rm(THREAD); 86 87 oop obj = SystemDictionary::Byte_klass()->allocate_instance(THREAD); 88 89 FlagSetting fs(WizardMode, true); 90 FlagSetting bf(UseBiasedLocking, true); 91 92 HandleMark hm(THREAD); 93 Handle h_obj(THREAD, obj); 94 95 // Biased locking is initially enabled for this java.lang.Byte object. 96 assert_test_pattern(h_obj, "is_biased"); 97 98 // Lock using biased locking. 99 BasicObjectLock lock; 100 lock.set_obj(obj); 101 markWord prototype_header = obj->klass()->prototype_header(); 102 markWord mark = obj->mark(); 103 markWord biased_mark = markWord::encode((JavaThread*) THREAD, mark.age(), prototype_header.bias_epoch()); 104 obj->set_mark(biased_mark); 105 // Look for the biased_locker in markWord, not prototype_header. 106 #ifdef _LP64 107 assert_not_test_pattern(h_obj, "mark(is_biased biased_locker=0x0000000000000000"); 108 #else 109 assert_not_test_pattern(h_obj, "mark(is_biased biased_locker=0x00000000"); 110 #endif 111 112 // Same thread tries to lock it again. 113 { 114 ObjectLocker ol(h_obj, THREAD); 115 assert_test_pattern(h_obj, "locked"); 116 } 117 118 // This is no longer biased, because ObjectLocker revokes the bias. 119 assert_test_pattern(h_obj, "is_neutral no_hash"); 120 121 // Wait gets the lock inflated. 122 { 123 ObjectLocker ol(h_obj, THREAD); 124 |