comparison src/share/vm/gc_implementation/parNew/parNewGeneration.cpp @ 1888:a7214d79fcf1

6896603: CMS/GCH: collection_attempt_is_safe() ergo should use more recent data Summary: Deprecated HandlePromotionFailure, removing the ability to turn off that feature, did away with one epoch look-ahead when deciding if a scavenge is likely to fail, relying on current data. Reviewed-by: jmasa, johnc, poonam
author ysr
date Sat, 23 Oct 2010 23:03:49 -0700
parents 894b1d7c7e01
children f95d63e2154a
comparison
equal deleted inserted replaced
1887:cd3ef3fd20dd 1888:a7214d79fcf1
844 844
845 // If the next generation is too full to accomodate worst-case promotion 845 // If the next generation is too full to accomodate worst-case promotion
846 // from this generation, pass on collection; let the next generation 846 // from this generation, pass on collection; let the next generation
847 // do it. 847 // do it.
848 if (!collection_attempt_is_safe()) { 848 if (!collection_attempt_is_safe()) {
849 gch->set_incremental_collection_will_fail(); 849 gch->set_incremental_collection_failed(); // slight lie, in that we did not even attempt one
850 return; 850 return;
851 } 851 }
852 assert(to()->is_empty(), "Else not collection_attempt_is_safe"); 852 assert(to()->is_empty(), "Else not collection_attempt_is_safe");
853 853
854 init_assuming_no_promotion_failure(); 854 init_assuming_no_promotion_failure();
933 // for full GC's. 933 // for full GC's.
934 size_policy->reset_gc_overhead_limit_count(); 934 size_policy->reset_gc_overhead_limit_count();
935 935
936 assert(to()->is_empty(), "to space should be empty now"); 936 assert(to()->is_empty(), "to space should be empty now");
937 } else { 937 } else {
938 assert(HandlePromotionFailure,
939 "Should only be here if promotion failure handling is on");
940 assert(_promo_failure_scan_stack.is_empty(), "post condition"); 938 assert(_promo_failure_scan_stack.is_empty(), "post condition");
941 _promo_failure_scan_stack.clear(true); // Clear cached segments. 939 _promo_failure_scan_stack.clear(true); // Clear cached segments.
942 940
943 remove_forwarding_pointers(); 941 remove_forwarding_pointers();
944 if (PrintGCDetails) { 942 if (PrintGCDetails) {
945 gclog_or_tty->print(" (promotion failed)"); 943 gclog_or_tty->print(" (promotion failed)");
946 } 944 }
947 // All the spaces are in play for mark-sweep. 945 // All the spaces are in play for mark-sweep.
948 swap_spaces(); // Make life simpler for CMS || rescan; see 6483690. 946 swap_spaces(); // Make life simpler for CMS || rescan; see 6483690.
949 from()->set_next_compaction_space(to()); 947 from()->set_next_compaction_space(to());
950 gch->set_incremental_collection_will_fail(); 948 gch->set_incremental_collection_failed();
951 // Inform the next generation that a promotion failure occurred. 949 // Inform the next generation that a promotion failure occurred.
952 _next_gen->promotion_failure_occurred(); 950 _next_gen->promotion_failure_occurred();
953 951
954 // Reset the PromotionFailureALot counters. 952 // Reset the PromotionFailureALot counters.
955 NOT_PRODUCT(Universe::heap()->reset_promotion_should_fail();) 953 NOT_PRODUCT(Universe::heap()->reset_promotion_should_fail();)
1090 1088
1091 new_obj = _next_gen->par_promote(par_scan_state->thread_num(), 1089 new_obj = _next_gen->par_promote(par_scan_state->thread_num(),
1092 old, m, sz); 1090 old, m, sz);
1093 1091
1094 if (new_obj == NULL) { 1092 if (new_obj == NULL) {
1095 if (!HandlePromotionFailure) {
1096 // A failed promotion likely means the MaxLiveObjectEvacuationRatio flag
1097 // is incorrectly set. In any case, its seriously wrong to be here!
1098 vm_exit_out_of_memory(sz*wordSize, "promotion");
1099 }
1100 // promotion failed, forward to self 1093 // promotion failed, forward to self
1101 _promotion_failed = true; 1094 _promotion_failed = true;
1102 new_obj = old; 1095 new_obj = old;
1103 1096
1104 preserve_mark_if_necessary(old, m); 1097 preserve_mark_if_necessary(old, m);
1204 // try allocating obj tenured 1197 // try allocating obj tenured
1205 new_obj = _next_gen->par_promote(par_scan_state->thread_num(), 1198 new_obj = _next_gen->par_promote(par_scan_state->thread_num(),
1206 old, m, sz); 1199 old, m, sz);
1207 1200
1208 if (new_obj == NULL) { 1201 if (new_obj == NULL) {
1209 if (!HandlePromotionFailure) {
1210 // A failed promotion likely means the MaxLiveObjectEvacuationRatio
1211 // flag is incorrectly set. In any case, its seriously wrong to be
1212 // here!
1213 vm_exit_out_of_memory(sz*wordSize, "promotion");
1214 }
1215 // promotion failed, forward to self 1202 // promotion failed, forward to self
1216 forward_ptr = old->forward_to_atomic(old); 1203 forward_ptr = old->forward_to_atomic(old);
1217 new_obj = old; 1204 new_obj = old;
1218 1205
1219 if (forward_ptr != NULL) { 1206 if (forward_ptr != NULL) {