equal
deleted
inserted
replaced
33 const size_t G1StringDedupQueue::_max_size = 1000000; // Max number of elements per queue |
33 const size_t G1StringDedupQueue::_max_size = 1000000; // Max number of elements per queue |
34 const size_t G1StringDedupQueue::_max_cache_size = 0; // Max cache size per queue |
34 const size_t G1StringDedupQueue::_max_cache_size = 0; // Max cache size per queue |
35 |
35 |
36 G1StringDedupQueue::G1StringDedupQueue() : |
36 G1StringDedupQueue::G1StringDedupQueue() : |
37 _cursor(0), |
37 _cursor(0), |
|
38 _cancel(false), |
38 _empty(true), |
39 _empty(true), |
39 _dropped(0) { |
40 _dropped(0) { |
40 _nqueues = MAX2(ParallelGCThreads, (size_t)1); |
41 _nqueues = MAX2(ParallelGCThreads, (size_t)1); |
41 _queues = NEW_C_HEAP_ARRAY(G1StringDedupWorkerQueue, _nqueues, mtGC); |
42 _queues = NEW_C_HEAP_ARRAY(G1StringDedupWorkerQueue, _nqueues, mtGC); |
42 for (size_t i = 0; i < _nqueues; i++) { |
43 for (size_t i = 0; i < _nqueues; i++) { |
53 _queue = new G1StringDedupQueue(); |
54 _queue = new G1StringDedupQueue(); |
54 } |
55 } |
55 |
56 |
56 void G1StringDedupQueue::wait() { |
57 void G1StringDedupQueue::wait() { |
57 MonitorLockerEx ml(StringDedupQueue_lock, Mutex::_no_safepoint_check_flag); |
58 MonitorLockerEx ml(StringDedupQueue_lock, Mutex::_no_safepoint_check_flag); |
58 while (_queue->_empty) { |
59 while (_queue->_empty && !_queue->_cancel) { |
59 ml.wait(Mutex::_no_safepoint_check_flag); |
60 ml.wait(Mutex::_no_safepoint_check_flag); |
60 } |
61 } |
|
62 } |
|
63 |
|
64 void G1StringDedupQueue::cancel_wait() { |
|
65 MonitorLockerEx ml(StringDedupQueue_lock, Mutex::_no_safepoint_check_flag); |
|
66 _queue->_cancel = true; |
|
67 ml.notify(); |
61 } |
68 } |
62 |
69 |
63 void G1StringDedupQueue::push(uint worker_id, oop java_string) { |
70 void G1StringDedupQueue::push(uint worker_id, oop java_string) { |
64 assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint"); |
71 assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint"); |
65 assert(worker_id < _queue->_nqueues, "Invalid queue"); |
72 assert(worker_id < _queue->_nqueues, "Invalid queue"); |