# HG changeset patch # User sbohne # Date 1204641864 18000 # Node ID 3cfeeae329937b888e5fddd4e4004460d67e9196 # Parent b4ebad8ef528e1baa20177ce4caf2fd5a87fe058 6666698: EnableBiasedLocking with BiasedLockingStartupDelay can block Watcher thread Summary: Enqueue VM_EnableBiasedLocking operation asynchronously Reviewed-by: never, xlu, kbr, acorn diff -r b4ebad8ef528 -r 3cfeeae32993 hotspot/src/share/vm/runtime/biasedLocking.cpp --- a/hotspot/src/share/vm/runtime/biasedLocking.cpp Mon Mar 03 14:47:02 2008 -0500 +++ b/hotspot/src/share/vm/runtime/biasedLocking.cpp Tue Mar 04 09:44:24 2008 -0500 @@ -38,8 +38,11 @@ class VM_EnableBiasedLocking: public VM_Operation { public: - VM_EnableBiasedLocking() {} - VMOp_Type type() const { return VMOp_EnableBiasedLocking; } + VM_EnableBiasedLocking() {} + VMOp_Type type() const { return VMOp_EnableBiasedLocking; } + Mode evaluation_mode() const { return _async_safepoint; } + bool is_cheap_allocated() const { return true; } + void doit() { // Iterate the system dictionary enabling biased locking for all // currently loaded classes @@ -62,8 +65,10 @@ EnableBiasedLockingTask(size_t interval_time) : PeriodicTask(interval_time) {} virtual void task() { - VM_EnableBiasedLocking op; - VMThread::execute(&op); + // Use async VM operation to avoid blocking the Watcher thread. + // VM Thread will free C heap storage. + VM_EnableBiasedLocking *op = new VM_EnableBiasedLocking(); + VMThread::execute(op); // Reclaim our storage and disenroll ourself delete this;