mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8151601: Cleanup locking of the Reference pending list
Reviewed-by: brutisso, stefank
This commit is contained in:
parent
9d3140761b
commit
da5ca5c5d5
29 changed files with 401 additions and 353 deletions
|
@ -28,7 +28,7 @@
|
|||
#include "gc/cms/concurrentMarkSweepThread.hpp"
|
||||
#include "gc/shared/gcId.hpp"
|
||||
#include "gc/shared/genCollectedHeap.hpp"
|
||||
#include "oops/instanceRefKlass.hpp"
|
||||
#include "gc/shared/referencePendingListLocker.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "runtime/init.hpp"
|
||||
#include "runtime/interfaceSupport.hpp"
|
||||
|
@ -46,11 +46,6 @@ int ConcurrentMarkSweepThread::_CMS_flag = CMS_nil;
|
|||
|
||||
volatile jint ConcurrentMarkSweepThread::_pending_yields = 0;
|
||||
|
||||
SurrogateLockerThread* ConcurrentMarkSweepThread::_slt = NULL;
|
||||
SurrogateLockerThread::SLT_msg_type
|
||||
ConcurrentMarkSweepThread::_sltBuffer = SurrogateLockerThread::empty;
|
||||
Monitor* ConcurrentMarkSweepThread::_sltMonitor = NULL;
|
||||
|
||||
ConcurrentMarkSweepThread::ConcurrentMarkSweepThread(CMSCollector* collector)
|
||||
: ConcurrentGCThread() {
|
||||
assert(UseConcMarkSweepGC, "UseConcMarkSweepGC should be set");
|
||||
|
@ -73,8 +68,6 @@ ConcurrentMarkSweepThread::ConcurrentMarkSweepThread(CMSCollector* collector)
|
|||
// That won't happen on Solaris for various reasons,
|
||||
// but may well happen on non-Solaris platforms.
|
||||
create_and_start(UseCriticalCMSThreadPriority ? CriticalPriority : NearMaxPriority);
|
||||
|
||||
_sltMonitor = SLT_lock;
|
||||
}
|
||||
|
||||
void ConcurrentMarkSweepThread::run_service() {
|
||||
|
@ -94,7 +87,7 @@ void ConcurrentMarkSweepThread::run_service() {
|
|||
// We cannot start the SLT thread ourselves since we need
|
||||
// to be a JavaThread to do so.
|
||||
CMSLoopCountWarn loopY("CMS::run", "waiting for SLT installation", 2);
|
||||
while (_slt == NULL && !should_terminate()) {
|
||||
while (!ReferencePendingListLocker::is_initialized() && !should_terminate()) {
|
||||
CGC_lock->wait(true, 200);
|
||||
loopY.tick();
|
||||
}
|
||||
|
@ -337,15 +330,3 @@ void ConcurrentMarkSweepThread::sleepBeforeNextCycle() {
|
|||
// and wait some more
|
||||
}
|
||||
}
|
||||
|
||||
// Note: this method, although exported by the ConcurrentMarkSweepThread,
|
||||
// which is a non-JavaThread, can only be called by a JavaThread.
|
||||
// Currently this is done at vm creation time (post-vm-init) by the
|
||||
// main/Primordial (Java)Thread.
|
||||
// XXX Consider changing this in the future to allow the CMS thread
|
||||
// itself to create this thread?
|
||||
void ConcurrentMarkSweepThread::makeSurrogateLockerThread(TRAPS) {
|
||||
assert(UseConcMarkSweepGC, "SLT thread needed only for CMS GC");
|
||||
assert(_slt == NULL, "SLT already created");
|
||||
_slt = SurrogateLockerThread::make(THREAD);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue