comparison src/share/vm/memory/cardTableModRefBS.cpp @ 14518:d8041d695d19

Merged with jdk9/dev/hotspot changeset 3812c088b945
author twisti
date Tue, 11 Mar 2014 18:45:59 -0700
parents 8a9bb7821e28
children 4ca6dc0799b6
comparison
equal deleted inserted replaced
14141:f97c5ec83832 14518:d8041d695d19
52 } 52 }
53 53
54 size_t CardTableModRefBS::compute_byte_map_size() 54 size_t CardTableModRefBS::compute_byte_map_size()
55 { 55 {
56 assert(_guard_index == cards_required(_whole_heap.word_size()) - 1, 56 assert(_guard_index == cards_required(_whole_heap.word_size()) - 1,
57 "unitialized, check declaration order"); 57 "uninitialized, check declaration order");
58 assert(_page_size != 0, "unitialized, check declaration order"); 58 assert(_page_size != 0, "uninitialized, check declaration order");
59 const size_t granularity = os::vm_allocation_granularity(); 59 const size_t granularity = os::vm_allocation_granularity();
60 return align_size_up(_guard_index + 1, MAX2(_page_size, granularity)); 60 return align_size_up(_guard_index + 1, MAX2(_page_size, granularity));
61 } 61 }
62 62
63 CardTableModRefBS::CardTableModRefBS(MemRegion whole_heap, 63 CardTableModRefBS::CardTableModRefBS(MemRegion whole_heap,
96 if (!heap_rs.is_reserved()) { 96 if (!heap_rs.is_reserved()) {
97 vm_exit_during_initialization("Could not reserve enough space for the " 97 vm_exit_during_initialization("Could not reserve enough space for the "
98 "card marking array"); 98 "card marking array");
99 } 99 }
100 100
101 // The assember store_check code will do an unsigned shift of the oop, 101 // The assembler store_check code will do an unsigned shift of the oop,
102 // then add it to byte_map_base, i.e. 102 // then add it to byte_map_base, i.e.
103 // 103 //
104 // _byte_map = byte_map_base + (uintptr_t(low_bound) >> card_shift) 104 // _byte_map = byte_map_base + (uintptr_t(low_bound) >> card_shift)
105 _byte_map = (jbyte*) heap_rs.base(); 105 _byte_map = (jbyte*) heap_rs.base();
106 byte_map_base = _byte_map - (uintptr_t(low_bound) >> card_shift); 106 byte_map_base = _byte_map - (uintptr_t(low_bound) >> card_shift);
241 MemRegion const old_region = _covered[ind]; 241 MemRegion const old_region = _covered[ind];
242 assert(old_region.start() == new_region.start(), "just checking"); 242 assert(old_region.start() == new_region.start(), "just checking");
243 if (new_region.word_size() != old_region.word_size()) { 243 if (new_region.word_size() != old_region.word_size()) {
244 // Commit new or uncommit old pages, if necessary. 244 // Commit new or uncommit old pages, if necessary.
245 MemRegion cur_committed = _committed[ind]; 245 MemRegion cur_committed = _committed[ind];
246 // Extend the end of this _commited region 246 // Extend the end of this _committed region
247 // to cover the end of any lower _committed regions. 247 // to cover the end of any lower _committed regions.
248 // This forms overlapping regions, but never interior regions. 248 // This forms overlapping regions, but never interior regions.
249 HeapWord* const max_prev_end = largest_prev_committed_end(ind); 249 HeapWord* const max_prev_end = largest_prev_committed_end(ind);
250 if (max_prev_end > cur_committed.end()) { 250 if (max_prev_end > cur_committed.end()) {
251 cur_committed.set_end(max_prev_end); 251 cur_committed.set_end(max_prev_end);
417 } 417 }
418 418
419 // Note that these versions are precise! The scanning code has to handle the 419 // Note that these versions are precise! The scanning code has to handle the
420 // fact that the write barrier may be either precise or imprecise. 420 // fact that the write barrier may be either precise or imprecise.
421 421
422 void CardTableModRefBS::write_ref_field_work(void* field, oop newVal) { 422 void CardTableModRefBS::write_ref_field_work(void* field, oop newVal, bool release) {
423 inline_write_ref_field(field, newVal); 423 inline_write_ref_field(field, newVal, release);
424 } 424 }
425 425
426 426
427 void CardTableModRefBS::non_clean_card_iterate_possibly_parallel(Space* sp, 427 void CardTableModRefBS::non_clean_card_iterate_possibly_parallel(Space* sp,
428 MemRegion mr, 428 MemRegion mr,
446 // setting n_par_threads to 0, then n_par_threads should be 446 // setting n_par_threads to 0, then n_par_threads should be
447 // equal to active_workers. When a different mechanism for shutting 447 // equal to active_workers. When a different mechanism for shutting
448 // off parallelism is used, then active_workers can be used in 448 // off parallelism is used, then active_workers can be used in
449 // place of n_par_threads. 449 // place of n_par_threads.
450 // This is an example of a path where n_par_threads is 450 // This is an example of a path where n_par_threads is
451 // set to 0 to turn off parallism. 451 // set to 0 to turn off parallelism.
452 // [7] CardTableModRefBS::non_clean_card_iterate() 452 // [7] CardTableModRefBS::non_clean_card_iterate()
453 // [8] CardTableRS::younger_refs_in_space_iterate() 453 // [8] CardTableRS::younger_refs_in_space_iterate()
454 // [9] Generation::younger_refs_in_space_iterate() 454 // [9] Generation::younger_refs_in_space_iterate()
455 // [10] OneContigSpaceCardGeneration::younger_refs_iterate() 455 // [10] OneContigSpaceCardGeneration::younger_refs_iterate()
456 // [11] CompactingPermGenGen::younger_refs_iterate() 456 // [11] CompactingPermGenGen::younger_refs_iterate()