< prev index next >
src/hotspot/share/runtime/objectMonitor.cpp
Print this page
rev 51780 : imported patch syncknobs-00-base
*** 2202,2293 ****
#undef NEWPERFCOUNTER
#undef NEWPERFVARIABLE
}
}
- static char * kvGet(char * kvList, const char * Key) {
- if (kvList == NULL) return NULL;
- size_t n = strlen(Key);
- char * Search;
- for (Search = kvList; *Search; Search += strlen(Search) + 1) {
- if (strncmp (Search, Key, n) == 0) {
- if (Search[n] == '=') return Search + n + 1;
- if (Search[n] == 0) return(char *) "1";
- }
- }
- return NULL;
- }
-
- static int kvGetInt(char * kvList, const char * Key, int Default) {
- char * v = kvGet(kvList, Key);
- int rslt = v ? ::strtol(v, NULL, 0) : Default;
- if (Knob_ReportSettings && v != NULL) {
- tty->print_cr("INFO: SyncKnob: %s %d(%d)", Key, rslt, Default) ;
- tty->flush();
- }
- return rslt;
- }
-
void ObjectMonitor::DeferredInitialize() {
if (InitDone > 0) return;
if (Atomic::cmpxchg (-1, &InitDone, 0) != 0) {
while (InitDone != 1) /* empty */;
return;
}
// One-shot global initialization ...
// The initialization is idempotent, so we don't need locks.
// In the future consider doing this via os::init_2().
- // SyncKnobs consist of <Key>=<Value> pairs in the style
- // of environment variables. Start by converting ':' to NUL.
-
- if (SyncKnobs == NULL) SyncKnobs = "";
-
- size_t sz = strlen(SyncKnobs);
- char * knobs = (char *) os::malloc(sz + 2, mtInternal);
- if (knobs == NULL) {
- vm_exit_out_of_memory(sz + 2, OOM_MALLOC_ERROR, "Parse SyncKnobs");
- guarantee(0, "invariant");
- }
- strcpy(knobs, SyncKnobs);
- knobs[sz+1] = 0;
- for (char * p = knobs; *p; p++) {
- if (*p == ':') *p = 0;
- }
-
- #define SETKNOB(x) { Knob_##x = kvGetInt(knobs, #x, Knob_##x); }
- SETKNOB(ReportSettings);
- SETKNOB(ExitRelease);
- SETKNOB(InlineNotify);
- SETKNOB(Verbose);
- SETKNOB(VerifyInUse);
- SETKNOB(VerifyMatch);
- SETKNOB(FixedSpin);
- SETKNOB(SpinLimit);
- SETKNOB(SpinBase);
- SETKNOB(SpinBackOff);
- SETKNOB(CASPenalty);
- SETKNOB(OXPenalty);
- SETKNOB(SpinSetSucc);
- SETKNOB(SuccEnabled);
- SETKNOB(SuccRestrict);
- SETKNOB(Penalty);
- SETKNOB(Bonus);
- SETKNOB(BonusB);
- SETKNOB(Poverty);
- SETKNOB(SpinAfterFutile);
- SETKNOB(UsePause);
- SETKNOB(SpinEarly);
- SETKNOB(OState);
- SETKNOB(MaxSpinners);
- SETKNOB(PreSpin);
- SETKNOB(ExitPolicy);
- SETKNOB(QMode);
- SETKNOB(ResetEvent);
- SETKNOB(MoveNotifyee);
- SETKNOB(FastHSSEC);
- #undef SETKNOB
if (os::is_MP()) {
BackOffMask = (1 << Knob_SpinBackOff) - 1;
if (Knob_ReportSettings) {
tty->print_cr("INFO: BackOffMask=0x%X", BackOffMask);
--- 2202,2221 ----
*** 2298,2307 ****
Knob_SpinBase = 0;
Knob_PreSpin = 0;
Knob_FixedSpin = -1;
}
- os::free(knobs);
OrderAccess::fence();
InitDone = 1;
}
--- 2226,2234 ----
< prev index next >