Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_interface/collectedHeap.cpp @ 1165:2dd52dea6d28
6902115: G1:assert(ignore_max_completed||thread->is_Java_thread()||SafepointSynchronize::is_at_safepoint())
Summary: Remove invalid assert and mangle filler objects in TLABs that are being retired.
Reviewed-by: ysr, jmasa
author | johnc |
---|---|
date | Tue, 12 Jan 2010 14:56:46 -0800 |
parents | 4ce7240d622c |
children | 7b0e9cba0307 |
comparison
equal
deleted
inserted
replaced
1149:0579c695832f | 1165:2dd52dea6d28 |
---|---|
239 assert(words % MinObjAlignment == 0, "unaligned size"); | 239 assert(words % MinObjAlignment == 0, "unaligned size"); |
240 assert(Universe::heap()->is_in_reserved(start), "not in heap"); | 240 assert(Universe::heap()->is_in_reserved(start), "not in heap"); |
241 assert(Universe::heap()->is_in_reserved(start + words - 1), "not in heap"); | 241 assert(Universe::heap()->is_in_reserved(start + words - 1), "not in heap"); |
242 } | 242 } |
243 | 243 |
244 void CollectedHeap::zap_filler_array(HeapWord* start, size_t words) | 244 void CollectedHeap::zap_filler_array(HeapWord* start, size_t words, bool zap) |
245 { | 245 { |
246 if (ZapFillerObjects) { | 246 if (ZapFillerObjects && zap) { |
247 Copy::fill_to_words(start + filler_array_hdr_size(), | 247 Copy::fill_to_words(start + filler_array_hdr_size(), |
248 words - filler_array_hdr_size(), 0XDEAFBABE); | 248 words - filler_array_hdr_size(), 0XDEAFBABE); |
249 } | 249 } |
250 } | 250 } |
251 #endif // ASSERT | 251 #endif // ASSERT |
252 | 252 |
253 void | 253 void |
254 CollectedHeap::fill_with_array(HeapWord* start, size_t words) | 254 CollectedHeap::fill_with_array(HeapWord* start, size_t words, bool zap) |
255 { | 255 { |
256 assert(words >= filler_array_min_size(), "too small for an array"); | 256 assert(words >= filler_array_min_size(), "too small for an array"); |
257 assert(words <= filler_array_max_size(), "too big for a single object"); | 257 assert(words <= filler_array_max_size(), "too big for a single object"); |
258 | 258 |
259 const size_t payload_size = words - filler_array_hdr_size(); | 259 const size_t payload_size = words - filler_array_hdr_size(); |
260 const size_t len = payload_size * HeapWordSize / sizeof(jint); | 260 const size_t len = payload_size * HeapWordSize / sizeof(jint); |
261 | 261 |
262 // Set the length first for concurrent GC. | 262 // Set the length first for concurrent GC. |
263 ((arrayOop)start)->set_length((int)len); | 263 ((arrayOop)start)->set_length((int)len); |
264 post_allocation_setup_common(Universe::intArrayKlassObj(), start, words); | 264 post_allocation_setup_common(Universe::intArrayKlassObj(), start, words); |
265 DEBUG_ONLY(zap_filler_array(start, words);) | 265 DEBUG_ONLY(zap_filler_array(start, words, zap);) |
266 } | 266 } |
267 | 267 |
268 void | 268 void |
269 CollectedHeap::fill_with_object_impl(HeapWord* start, size_t words) | 269 CollectedHeap::fill_with_object_impl(HeapWord* start, size_t words, bool zap) |
270 { | 270 { |
271 assert(words <= filler_array_max_size(), "too big for a single object"); | 271 assert(words <= filler_array_max_size(), "too big for a single object"); |
272 | 272 |
273 if (words >= filler_array_min_size()) { | 273 if (words >= filler_array_min_size()) { |
274 fill_with_array(start, words); | 274 fill_with_array(start, words, zap); |
275 } else if (words > 0) { | 275 } else if (words > 0) { |
276 assert(words == min_fill_size(), "unaligned size"); | 276 assert(words == min_fill_size(), "unaligned size"); |
277 post_allocation_setup_common(SystemDictionary::Object_klass(), start, | 277 post_allocation_setup_common(SystemDictionary::Object_klass(), start, |
278 words); | 278 words); |
279 } | 279 } |
280 } | 280 } |
281 | 281 |
282 void CollectedHeap::fill_with_object(HeapWord* start, size_t words) | 282 void CollectedHeap::fill_with_object(HeapWord* start, size_t words, bool zap) |
283 { | 283 { |
284 DEBUG_ONLY(fill_args_check(start, words);) | 284 DEBUG_ONLY(fill_args_check(start, words);) |
285 HandleMark hm; // Free handles before leaving. | 285 HandleMark hm; // Free handles before leaving. |
286 fill_with_object_impl(start, words); | 286 fill_with_object_impl(start, words, zap); |
287 } | 287 } |
288 | 288 |
289 void CollectedHeap::fill_with_objects(HeapWord* start, size_t words) | 289 void CollectedHeap::fill_with_objects(HeapWord* start, size_t words, bool zap) |
290 { | 290 { |
291 DEBUG_ONLY(fill_args_check(start, words);) | 291 DEBUG_ONLY(fill_args_check(start, words);) |
292 HandleMark hm; // Free handles before leaving. | 292 HandleMark hm; // Free handles before leaving. |
293 | 293 |
294 #ifdef LP64 | 294 #ifdef LP64 |
297 // fill. The remainder is filled with a single object. | 297 // fill. The remainder is filled with a single object. |
298 const size_t min = min_fill_size(); | 298 const size_t min = min_fill_size(); |
299 const size_t max = filler_array_max_size(); | 299 const size_t max = filler_array_max_size(); |
300 while (words > max) { | 300 while (words > max) { |
301 const size_t cur = words - max >= min ? max : max - min; | 301 const size_t cur = words - max >= min ? max : max - min; |
302 fill_with_array(start, cur); | 302 fill_with_array(start, cur, zap); |
303 start += cur; | 303 start += cur; |
304 words -= cur; | 304 words -= cur; |
305 } | 305 } |
306 #endif | 306 #endif |
307 | 307 |
308 fill_with_object_impl(start, words); | 308 fill_with_object_impl(start, words, zap); |
309 } | 309 } |
310 | 310 |
311 HeapWord* CollectedHeap::allocate_new_tlab(size_t size) { | 311 HeapWord* CollectedHeap::allocate_new_tlab(size_t size) { |
312 guarantee(false, "thread-local allocation buffers not supported"); | 312 guarantee(false, "thread-local allocation buffers not supported"); |
313 return NULL; | 313 return NULL; |