src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hs-gc-g1-mmap Sdiff src/share/vm/gc_implementation/parNew

src/share/vm/gc_implementation/parNew/parNewGeneration.cpp

Print this page




 910 void ParNewGeneration::collect(bool   full,
 911                                bool   clear_all_soft_refs,
 912                                size_t size,
 913                                bool   is_tlab) {
 914   assert(full || size > 0, "otherwise we don't want to collect");
 915 
 916   GenCollectedHeap* gch = GenCollectedHeap::heap();
 917 
 918   _gc_timer->register_gc_start(os::elapsed_counter());
 919 
 920   assert(gch->kind() == CollectedHeap::GenCollectedHeap,
 921     "not a CMS generational heap");
 922   AdaptiveSizePolicy* size_policy = gch->gen_policy()->size_policy();
 923   FlexibleWorkGang* workers = gch->workers();
 924   assert(workers != NULL, "Need workgang for parallel work");
 925   int active_workers =
 926       AdaptiveSizePolicy::calc_active_workers(workers->total_workers(),
 927                                    workers->active_workers(),
 928                                    Threads::number_of_non_daemon_threads());
 929   workers->set_active_workers(active_workers);
 930   _next_gen = gch->next_gen(this);
 931   assert(_next_gen != NULL,
 932     "This must be the youngest gen, and not the only gen");
 933   assert(gch->n_gens() == 2,
 934          "Par collection currently only works with single older gen.");

 935   // Do we have to avoid promotion_undo?
 936   if (gch->collector_policy()->is_concurrent_mark_sweep_policy()) {
 937     set_avoid_promotion_undo(true);
 938   }
 939 
 940   // If the next generation is too full to accommodate worst-case promotion
 941   // from this generation, pass on collection; let the next generation
 942   // do it.
 943   if (!collection_attempt_is_safe()) {
 944     gch->set_incremental_collection_failed();  // slight lie, in that we did not even attempt one
 945     return;
 946   }
 947   assert(to()->is_empty(), "Else not collection_attempt_is_safe");
 948 
 949   ParNewTracer gc_tracer;
 950   gc_tracer.report_gc_start(gch->gc_cause(), _gc_timer->gc_start());
 951   gch->trace_heap_before_gc(&gc_tracer);
 952 
 953   init_assuming_no_promotion_failure();
 954 




 910 void ParNewGeneration::collect(bool   full,
 911                                bool   clear_all_soft_refs,
 912                                size_t size,
 913                                bool   is_tlab) {
 914   assert(full || size > 0, "otherwise we don't want to collect");
 915 
 916   GenCollectedHeap* gch = GenCollectedHeap::heap();
 917 
 918   _gc_timer->register_gc_start(os::elapsed_counter());
 919 
 920   assert(gch->kind() == CollectedHeap::GenCollectedHeap,
 921     "not a CMS generational heap");
 922   AdaptiveSizePolicy* size_policy = gch->gen_policy()->size_policy();
 923   FlexibleWorkGang* workers = gch->workers();
 924   assert(workers != NULL, "Need workgang for parallel work");
 925   int active_workers =
 926       AdaptiveSizePolicy::calc_active_workers(workers->total_workers(),
 927                                    workers->active_workers(),
 928                                    Threads::number_of_non_daemon_threads());
 929   workers->set_active_workers(active_workers);



 930   assert(gch->n_gens() == 2,
 931          "Par collection currently only works with single older gen.");
 932   _next_gen = gch->next_gen(this);
 933   // Do we have to avoid promotion_undo?
 934   if (gch->collector_policy()->is_concurrent_mark_sweep_policy()) {
 935     set_avoid_promotion_undo(true);
 936   }
 937 
 938   // If the next generation is too full to accommodate worst-case promotion
 939   // from this generation, pass on collection; let the next generation
 940   // do it.
 941   if (!collection_attempt_is_safe()) {
 942     gch->set_incremental_collection_failed();  // slight lie, in that we did not even attempt one
 943     return;
 944   }
 945   assert(to()->is_empty(), "Else not collection_attempt_is_safe");
 946 
 947   ParNewTracer gc_tracer;
 948   gc_tracer.report_gc_start(gch->gc_cause(), _gc_timer->gc_start());
 949   gch->trace_heap_before_gc(&gc_tracer);
 950 
 951   init_assuming_no_promotion_failure();
 952 


src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File