< prev index next >
src/share/vm/gc/g1/g1ConcurrentMark.inline.hpp
Print this page
rev 11935 : imported patch 8159422-high-mark-stack-contention
rev 11936 : imported patch 8159422-mikael-review
*** 87,104 ****
return _bm.par_set_bit(heapWordToOffset(addr));
}
#undef check_mark
template<typename Fn>
inline void G1CMMarkStack::iterate(Fn fn) {
! assert_at_safepoint(true);
! assert(!stack_modified(), "Saved index " SIZE_FORMAT " must be the same as " SIZE_FORMAT, _saved_index, _index);
! for (size_t i = 0; i < _index; ++i) {
! fn(_base[i]);
}
}
// It scans an object and visits its children.
inline void G1CMTask::scan_object(oop obj) { process_grey_object<true>(obj); }
inline void G1CMTask::push(oop obj) {
--- 87,116 ----
return _bm.par_set_bit(heapWordToOffset(addr));
}
#undef check_mark
+ #ifndef PRODUCT
template<typename Fn>
inline void G1CMMarkStack::iterate(Fn fn) {
! size_t num_chunks = 0;
!
! OopChunk* cur = _chunk_list;
! while (cur != NULL) {
! guarantee(num_chunks <= _chunks_in_chunk_list, "Found " SIZE_FORMAT " oop chunks which is more than there should be", num_chunks);
!
! for (size_t i = 0; i < OopsPerChunk; ++i) {
! if (cur->data[i] == NULL) {
! break;
! }
! fn((oop)cur->data[i]);
! }
! cur = cur->next;
! num_chunks++;
}
}
+ #endif
// It scans an object and visits its children.
inline void G1CMTask::scan_object(oop obj) { process_grey_object<true>(obj); }
inline void G1CMTask::push(oop obj) {
< prev index next >