提交 e4297566 编写于 作者: P pliden

8036672: G1: alloc_purpose in copy_to_survivor_space() used incorrectly

Reviewed-by: brutisso, tschatzl
上级 30ebed7c
...@@ -4743,6 +4743,12 @@ oop G1ParScanThreadState::copy_to_survivor_space(oop const old) { ...@@ -4743,6 +4743,12 @@ oop G1ParScanThreadState::copy_to_survivor_space(oop const old) {
oop forward_ptr = old->forward_to_atomic(obj); oop forward_ptr = old->forward_to_atomic(obj);
if (forward_ptr == NULL) { if (forward_ptr == NULL) {
Copy::aligned_disjoint_words((HeapWord*) old, obj_ptr, word_sz); Copy::aligned_disjoint_words((HeapWord*) old, obj_ptr, word_sz);
// alloc_purpose is just a hint to allocate() above, recheck the type of region
// we actually allocated from and update alloc_purpose accordingly
HeapRegion* to_region = _g1h->heap_region_containing_raw(obj_ptr);
alloc_purpose = to_region->is_young() ? GCAllocForSurvived : GCAllocForTenured;
if (g1p->track_object_age(alloc_purpose)) { if (g1p->track_object_age(alloc_purpose)) {
// We could simply do obj->incr_age(). However, this causes a // We could simply do obj->incr_age(). However, this causes a
// performance issue. obj->incr_age() will first check whether // performance issue. obj->incr_age() will first check whether
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册