src/share/vm/memory/defNewGeneration.cpp

changeset 2380
74ee0db180fa
parent 2336
6cd6d394f280
child 2996
48048b59a551
     1.1 --- a/src/share/vm/memory/defNewGeneration.cpp	Fri Dec 17 11:26:53 2010 -0800
     1.2 +++ b/src/share/vm/memory/defNewGeneration.cpp	Fri Dec 17 23:41:31 2010 -0800
     1.3 @@ -684,23 +684,28 @@
     1.4    _preserved_marks_of_objs.clear(true);
     1.5  }
     1.6  
     1.7 +void DefNewGeneration::preserve_mark(oop obj, markOop m) {
     1.8 +  assert(promotion_failed() && m->must_be_preserved_for_promotion_failure(obj),
     1.9 +         "Oversaving!");
    1.10 +  _objs_with_preserved_marks.push(obj);
    1.11 +  _preserved_marks_of_objs.push(m);
    1.12 +}
    1.13 +
    1.14  void DefNewGeneration::preserve_mark_if_necessary(oop obj, markOop m) {
    1.15    if (m->must_be_preserved_for_promotion_failure(obj)) {
    1.16 -    _objs_with_preserved_marks.push(obj);
    1.17 -    _preserved_marks_of_objs.push(m);
    1.18 +    preserve_mark(obj, m);
    1.19    }
    1.20  }
    1.21  
    1.22  void DefNewGeneration::handle_promotion_failure(oop old) {
    1.23 -  preserve_mark_if_necessary(old, old->mark());
    1.24 -  if (!_promotion_failed && PrintPromotionFailure) {
    1.25 +  if (PrintPromotionFailure && !_promotion_failed) {
    1.26      gclog_or_tty->print(" (promotion failure size = " SIZE_FORMAT ") ",
    1.27                          old->size());
    1.28    }
    1.29 -
    1.30 +  _promotion_failed = true;
    1.31 +  preserve_mark_if_necessary(old, old->mark());
    1.32    // forward to self
    1.33    old->forward_to(old);
    1.34 -  _promotion_failed = true;
    1.35  
    1.36    _promo_failure_scan_stack.push(old);
    1.37  

mercurial