< prev index next >
src/share/vm/gc/g1/g1StringDedupQueue.cpp
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -36,29 +36,35 @@
G1StringDedupQueue* G1StringDedupQueue::_queue = NULL;
const size_t G1StringDedupQueue::_max_size = 1000000; // Max number of elements per queue
const size_t G1StringDedupQueue::_max_cache_size = 0; // Max cache size per queue
-G1StringDedupQueue::G1StringDedupQueue() :
+G1StringDedupQueue::G1StringDedupQueue(size_t num_queues) :
_cursor(0),
_cancel(false),
_empty(true),
- _dropped(0) {
- _nqueues = ParallelGCThreads;
+ _dropped(0),
+ _nqueues(num_queues) {
+ if (_nqueues > 0) {
_queues = NEW_C_HEAP_ARRAY(G1StringDedupWorkerQueue, _nqueues, mtGC);
for (size_t i = 0; i < _nqueues; i++) {
new (_queues + i) G1StringDedupWorkerQueue(G1StringDedupWorkerQueue::default_segment_size(), _max_cache_size, _max_size);
}
+ }
}
G1StringDedupQueue::~G1StringDedupQueue() {
ShouldNotReachHere();
}
void G1StringDedupQueue::create() {
+ create(ParallelGCThreads);
+}
+
+void G1StringDedupQueue::create(size_t num_queues) {
assert(_queue == NULL, "One string deduplication queue allowed");
- _queue = new G1StringDedupQueue();
+ _queue = new G1StringDedupQueue(num_queues);
}
void G1StringDedupQueue::wait() {
MonitorLockerEx ml(StringDedupQueue_lock, Mutex::_no_safepoint_check_flag);
while (_queue->_empty && !_queue->_cancel) {
< prev index next >