equal
deleted
inserted
replaced
429 } |
429 } |
430 |
430 |
431 void G1CollectedHeap::stop_conc_gc_threads() { |
431 void G1CollectedHeap::stop_conc_gc_threads() { |
432 _cg1r->stop(); |
432 _cg1r->stop(); |
433 _cmThread->stop(); |
433 _cmThread->stop(); |
|
434 if (G1StringDedup::is_enabled()) { |
|
435 G1StringDedup::stop(); |
|
436 } |
434 } |
437 } |
435 |
438 |
436 #ifdef ASSERT |
439 #ifdef ASSERT |
437 // A region is added to the collection set as it is retired |
440 // A region is added to the collection set as it is retired |
438 // so an address p can point to a region which will be in the |
441 // so an address p can point to a region which will be in the |
2176 G1StringDedup::initialize(); |
2179 G1StringDedup::initialize(); |
2177 |
2180 |
2178 return JNI_OK; |
2181 return JNI_OK; |
2179 } |
2182 } |
2180 |
2183 |
|
2184 void G1CollectedHeap::stop() { |
|
2185 // Abort any ongoing concurrent root region scanning and stop all |
|
2186 // concurrent threads. We do this to make sure these threads do |
|
2187 // not continue to execute and access resources (e.g. gclog_or_tty) |
|
2188 // that are destroyed during shutdown. |
|
2189 _cm->root_regions()->abort(); |
|
2190 _cm->root_regions()->wait_until_scan_finished(); |
|
2191 stop_conc_gc_threads(); |
|
2192 } |
|
2193 |
2181 size_t G1CollectedHeap::conservative_max_heap_alignment() { |
2194 size_t G1CollectedHeap::conservative_max_heap_alignment() { |
2182 return HeapRegion::max_region_size(); |
2195 return HeapRegion::max_region_size(); |
2183 } |
2196 } |
2184 |
2197 |
2185 void G1CollectedHeap::ref_processing_init() { |
2198 void G1CollectedHeap::ref_processing_init() { |