666 _cfls(sp), _collector(collector) {} |
666 _cfls(sp), _collector(collector) {} |
667 }; |
667 }; |
668 |
668 |
669 // We de-virtualize the block-related calls below, since we know that our |
669 // We de-virtualize the block-related calls below, since we know that our |
670 // space is a CompactibleFreeListSpace. |
670 // space is a CompactibleFreeListSpace. |
|
671 |
671 #define FreeListSpace_DCTOC__walk_mem_region_with_cl_DEFN(ClosureType) \ |
672 #define FreeListSpace_DCTOC__walk_mem_region_with_cl_DEFN(ClosureType) \ |
672 void FreeListSpace_DCTOC::walk_mem_region_with_cl(MemRegion mr, \ |
673 void FreeListSpace_DCTOC::walk_mem_region_with_cl(MemRegion mr, \ |
673 HeapWord* bottom, \ |
674 HeapWord* bottom, \ |
674 HeapWord* top, \ |
675 HeapWord* top, \ |
675 ClosureType* cl) { \ |
676 ClosureType* cl) { \ |
676 if (SharedHeap::heap()->n_par_threads() > 0) { \ |
677 bool is_par = SharedHeap::heap()->n_par_threads() > 0; \ |
|
678 if (is_par) { \ |
|
679 assert(SharedHeap::heap()->n_par_threads() == \ |
|
680 SharedHeap::heap()->workers()->active_workers(), "Mismatch"); \ |
677 walk_mem_region_with_cl_par(mr, bottom, top, cl); \ |
681 walk_mem_region_with_cl_par(mr, bottom, top, cl); \ |
678 } else { \ |
682 } else { \ |
679 walk_mem_region_with_cl_nopar(mr, bottom, top, cl); \ |
683 walk_mem_region_with_cl_nopar(mr, bottom, top, cl); \ |
680 } \ |
684 } \ |
681 } \ |
685 } \ |
1923 assert(chunk->isFree() && ffc->isFree(), "Error"); |
1927 assert(chunk->isFree() && ffc->isFree(), "Error"); |
1924 _bt.split_block((HeapWord*)chunk, chunk->size(), new_size); |
1928 _bt.split_block((HeapWord*)chunk, chunk->size(), new_size); |
1925 if (rem_size < SmallForDictionary) { |
1929 if (rem_size < SmallForDictionary) { |
1926 bool is_par = (SharedHeap::heap()->n_par_threads() > 0); |
1930 bool is_par = (SharedHeap::heap()->n_par_threads() > 0); |
1927 if (is_par) _indexedFreeListParLocks[rem_size]->lock(); |
1931 if (is_par) _indexedFreeListParLocks[rem_size]->lock(); |
|
1932 assert(!is_par || |
|
1933 (SharedHeap::heap()->n_par_threads() == |
|
1934 SharedHeap::heap()->workers()->active_workers()), "Mismatch"); |
1928 returnChunkToFreeList(ffc); |
1935 returnChunkToFreeList(ffc); |
1929 split(size, rem_size); |
1936 split(size, rem_size); |
1930 if (is_par) _indexedFreeListParLocks[rem_size]->unlock(); |
1937 if (is_par) _indexedFreeListParLocks[rem_size]->unlock(); |
1931 } else { |
1938 } else { |
1932 returnChunkToDictionary(ffc); |
1939 returnChunkToDictionary(ffc); |