Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/g1/concurrentMark.cpp @ 6198:24b9c7f4cae6
Merge
author | coleenp |
---|---|
date | Mon, 02 Jul 2012 13:11:28 -0400 |
parents | d2a62e0f25eb |
children | 3a431b605145 |
comparison
equal
deleted
inserted
replaced
6195:bcffa4c5eef6 | 6198:24b9c7f4cae6 |
---|---|
40 #include "memory/referencePolicy.hpp" | 40 #include "memory/referencePolicy.hpp" |
41 #include "memory/resourceArea.hpp" | 41 #include "memory/resourceArea.hpp" |
42 #include "oops/oop.inline.hpp" | 42 #include "oops/oop.inline.hpp" |
43 #include "runtime/handles.inline.hpp" | 43 #include "runtime/handles.inline.hpp" |
44 #include "runtime/java.hpp" | 44 #include "runtime/java.hpp" |
45 #include "services/memTracker.hpp" | |
45 | 46 |
46 // Concurrent marking bit map wrapper | 47 // Concurrent marking bit map wrapper |
47 | 48 |
48 CMBitMapRO::CMBitMapRO(ReservedSpace rs, int shifter) : | 49 CMBitMapRO::CMBitMapRO(ReservedSpace rs, int shifter) : |
49 _bm((uintptr_t*)NULL,0), | 50 _bm((uintptr_t*)NULL,0), |
50 _shifter(shifter) { | 51 _shifter(shifter) { |
51 _bmStartWord = (HeapWord*)(rs.base()); | 52 _bmStartWord = (HeapWord*)(rs.base()); |
52 _bmWordSize = rs.size()/HeapWordSize; // rs.size() is in bytes | 53 _bmWordSize = rs.size()/HeapWordSize; // rs.size() is in bytes |
53 ReservedSpace brs(ReservedSpace::allocation_align_size_up( | 54 ReservedSpace brs(ReservedSpace::allocation_align_size_up( |
54 (_bmWordSize >> (_shifter + LogBitsPerByte)) + 1)); | 55 (_bmWordSize >> (_shifter + LogBitsPerByte)) + 1)); |
56 | |
57 MemTracker::record_virtual_memory_type((address)brs.base(), mtGC); | |
55 | 58 |
56 guarantee(brs.is_reserved(), "couldn't allocate concurrent marking bit map"); | 59 guarantee(brs.is_reserved(), "couldn't allocate concurrent marking bit map"); |
57 // For now we'll just commit all of the bit map up fromt. | 60 // For now we'll just commit all of the bit map up fromt. |
58 // Later on we'll try to be more parsimonious with swap. | 61 // Later on we'll try to be more parsimonious with swap. |
59 guarantee(_virtual_space.initialize(brs, brs.size()), | 62 guarantee(_virtual_space.initialize(brs, brs.size()), |
159 , _drain_in_progress_yields(false) | 162 , _drain_in_progress_yields(false) |
160 #endif | 163 #endif |
161 {} | 164 {} |
162 | 165 |
163 void CMMarkStack::allocate(size_t size) { | 166 void CMMarkStack::allocate(size_t size) { |
164 _base = NEW_C_HEAP_ARRAY(oop, size); | 167 _base = NEW_C_HEAP_ARRAY(oop, size, mtGC); |
165 if (_base == NULL) { | 168 if (_base == NULL) { |
166 vm_exit_during_initialization("Failed to allocate CM region mark stack"); | 169 vm_exit_during_initialization("Failed to allocate CM region mark stack"); |
167 } | 170 } |
168 _index = 0; | 171 _index = 0; |
169 _capacity = (jint) size; | 172 _capacity = (jint) size; |
171 NOT_PRODUCT(_max_depth = 0); | 174 NOT_PRODUCT(_max_depth = 0); |
172 } | 175 } |
173 | 176 |
174 CMMarkStack::~CMMarkStack() { | 177 CMMarkStack::~CMMarkStack() { |
175 if (_base != NULL) { | 178 if (_base != NULL) { |
176 FREE_C_HEAP_ARRAY(oop, _base); | 179 FREE_C_HEAP_ARRAY(oop, _base, mtGC); |
177 } | 180 } |
178 } | 181 } |
179 | 182 |
180 void CMMarkStack::par_push(oop ptr) { | 183 void CMMarkStack::par_push(oop ptr) { |
181 while (true) { | 184 while (true) { |
478 SATBMarkQueueSet& satb_qs = JavaThread::satb_mark_queue_set(); | 481 SATBMarkQueueSet& satb_qs = JavaThread::satb_mark_queue_set(); |
479 satb_qs.set_buffer_size(G1SATBBufferSize); | 482 satb_qs.set_buffer_size(G1SATBBufferSize); |
480 | 483 |
481 _root_regions.init(_g1h, this); | 484 _root_regions.init(_g1h, this); |
482 | 485 |
483 _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num); | 486 _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num, mtGC); |
484 _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num); | 487 _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num, mtGC); |
485 | 488 |
486 _count_card_bitmaps = NEW_C_HEAP_ARRAY(BitMap, _max_task_num); | 489 _count_card_bitmaps = NEW_C_HEAP_ARRAY(BitMap, _max_task_num, mtGC); |
487 _count_marked_bytes = NEW_C_HEAP_ARRAY(size_t*, _max_task_num); | 490 _count_marked_bytes = NEW_C_HEAP_ARRAY(size_t*, _max_task_num, mtGC); |
488 | 491 |
489 BitMap::idx_t card_bm_size = _card_bm.size(); | 492 BitMap::idx_t card_bm_size = _card_bm.size(); |
490 | 493 |
491 // so that the assertion in MarkingTaskQueue::task_queue doesn't fail | 494 // so that the assertion in MarkingTaskQueue::task_queue doesn't fail |
492 _active_tasks = _max_task_num; | 495 _active_tasks = _max_task_num; |
494 CMTaskQueue* task_queue = new CMTaskQueue(); | 497 CMTaskQueue* task_queue = new CMTaskQueue(); |
495 task_queue->initialize(); | 498 task_queue->initialize(); |
496 _task_queues->register_queue(i, task_queue); | 499 _task_queues->register_queue(i, task_queue); |
497 | 500 |
498 _count_card_bitmaps[i] = BitMap(card_bm_size, false); | 501 _count_card_bitmaps[i] = BitMap(card_bm_size, false); |
499 _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, (size_t) max_regions); | 502 _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, (size_t) max_regions, mtGC); |
500 | 503 |
501 _tasks[i] = new CMTask(i, this, | 504 _tasks[i] = new CMTask(i, this, |
502 _count_marked_bytes[i], | 505 _count_marked_bytes[i], |
503 &_count_card_bitmaps[i], | 506 &_count_card_bitmaps[i], |
504 task_queue, _task_queues); | 507 task_queue, _task_queues); |