Mercurial > hg > graal-compiler
comparison src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp @ 10333:6702da6b6082
8014405: G1: PerRegionTable::fl_mem_size() calculates size of the free list using wrong element sizes
Summary: Instead of using a simple sizeof(), ask the PerRegionTable class about its size when iterating over the free list.
Reviewed-by: jwilhelm, brutisso
author | tschatzl |
---|---|
date | Tue, 21 May 2013 11:30:14 +0200 |
parents | 2958af1d8c5a |
children | 5888334c9c24 |
comparison
equal
deleted
inserted
replaced
10332:5ed122fbd0ef | 10333:6702da6b6082 |
---|---|
240 | 240 |
241 static size_t fl_mem_size() { | 241 static size_t fl_mem_size() { |
242 PerRegionTable* cur = _free_list; | 242 PerRegionTable* cur = _free_list; |
243 size_t res = 0; | 243 size_t res = 0; |
244 while (cur != NULL) { | 244 while (cur != NULL) { |
245 res += sizeof(PerRegionTable); | 245 res += cur->mem_size(); |
246 cur = cur->next(); | 246 cur = cur->next(); |
247 } | 247 } |
248 return res; | 248 return res; |
249 } | 249 } |
250 | |
251 static void test_fl_mem_size(); | |
250 }; | 252 }; |
251 | 253 |
252 PerRegionTable* PerRegionTable::_free_list = NULL; | 254 PerRegionTable* PerRegionTable::_free_list = NULL; |
253 | 255 |
254 size_t OtherRegionsTable::_max_fine_entries = 0; | 256 size_t OtherRegionsTable::_max_fine_entries = 0; |
1147 HeapRegionRemSet::finish_cleanup_task(HRRSCleanupTask* hrrs_cleanup_task) { | 1149 HeapRegionRemSet::finish_cleanup_task(HRRSCleanupTask* hrrs_cleanup_task) { |
1148 SparsePRT::finish_cleanup_task(hrrs_cleanup_task); | 1150 SparsePRT::finish_cleanup_task(hrrs_cleanup_task); |
1149 } | 1151 } |
1150 | 1152 |
1151 #ifndef PRODUCT | 1153 #ifndef PRODUCT |
1154 void PerRegionTable::test_fl_mem_size() { | |
1155 PerRegionTable* dummy = alloc(NULL); | |
1156 free(dummy); | |
1157 guarantee(dummy->mem_size() == fl_mem_size(), "fl_mem_size() does not return the correct element size"); | |
1158 // try to reset the state | |
1159 _free_list = NULL; | |
1160 delete dummy; | |
1161 } | |
1162 | |
1163 void HeapRegionRemSet::test_prt() { | |
1164 PerRegionTable::test_fl_mem_size(); | |
1165 } | |
1166 | |
1152 void HeapRegionRemSet::test() { | 1167 void HeapRegionRemSet::test() { |
1153 os::sleep(Thread::current(), (jlong)5000, false); | 1168 os::sleep(Thread::current(), (jlong)5000, false); |
1154 G1CollectedHeap* g1h = G1CollectedHeap::heap(); | 1169 G1CollectedHeap* g1h = G1CollectedHeap::heap(); |
1155 | 1170 |
1156 // Run with "-XX:G1LogRSetRegionEntries=2", so that 1 and 5 end up in same | 1171 // Run with "-XX:G1LogRSetRegionEntries=2", so that 1 and 5 end up in same |