< prev index next >

src/share/vm/gc/cms/parNewGeneration.cpp

Print this page




 565 
 566 void ParNewGenTask::work(uint worker_id) {
 567   GenCollectedHeap* gch = GenCollectedHeap::heap();
 568   // Since this is being done in a separate thread, need new resource
 569   // and handle marks.
 570   ResourceMark rm;
 571   HandleMark hm;
 572 
 573   ParScanThreadState& par_scan_state = _state_set->thread_state(worker_id);
 574   assert(_state_set->is_valid(worker_id), "Should not have been called");
 575 
 576   par_scan_state.set_young_old_boundary(_young_old_boundary);
 577 
 578   KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(),
 579                                       gch->rem_set()->klass_rem_set());
 580   CLDToKlassAndOopClosure cld_scan_closure(&klass_scan_closure,
 581                                            &par_scan_state.to_space_root_closure(),
 582                                            false);
 583 
 584   par_scan_state.start_strong_roots();
 585   gch->gen_process_roots(_strong_roots_scope,
 586                          GenCollectedHeap::YoungGen,
 587                          true,  // Process younger gens, if any, as strong roots.
 588                          GenCollectedHeap::SO_ScavengeCodeCache,
 589                          GenCollectedHeap::StrongAndWeakRoots,
 590                          &par_scan_state.to_space_root_closure(),
 591                          &par_scan_state.older_gen_closure(),
 592                          &cld_scan_closure);
 593 
 594   par_scan_state.end_strong_roots();
 595 
 596   // "evacuate followers".
 597   par_scan_state.evacuate_followers_closure().do_void();
 598 }
 599 
 600 #ifdef _MSC_VER
 601 #pragma warning( push )
 602 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list
 603 #endif
 604 ParNewGeneration::ParNewGeneration(ReservedSpace rs, size_t initial_byte_size)
 605   : DefNewGeneration(rs, initial_byte_size, "PCopy"),
 606   _overflow_list(NULL),
 607   _is_alive_closure(this),
 608   _plab_stats(YoungPLABSize, PLABWeight)
 609 {
 610   NOT_PRODUCT(_overflow_counter = ParGCWorkQueueOverflowInterval;)
 611   NOT_PRODUCT(_num_par_pushes = 0;)
 612   _task_queues = new ObjToScanQueueSet(ParallelGCThreads);




 565 
 566 void ParNewGenTask::work(uint worker_id) {
 567   GenCollectedHeap* gch = GenCollectedHeap::heap();
 568   // Since this is being done in a separate thread, need new resource
 569   // and handle marks.
 570   ResourceMark rm;
 571   HandleMark hm;
 572 
 573   ParScanThreadState& par_scan_state = _state_set->thread_state(worker_id);
 574   assert(_state_set->is_valid(worker_id), "Should not have been called");
 575 
 576   par_scan_state.set_young_old_boundary(_young_old_boundary);
 577 
 578   KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(),
 579                                       gch->rem_set()->klass_rem_set());
 580   CLDToKlassAndOopClosure cld_scan_closure(&klass_scan_closure,
 581                                            &par_scan_state.to_space_root_closure(),
 582                                            false);
 583 
 584   par_scan_state.start_strong_roots();
 585   gch->young_process_roots(_strong_roots_scope,
 586                            &par_scan_state.to_space_root_closure(),
 587                            &par_scan_state.older_gen_closure(),
 588                            &cld_scan_closure);




 589 
 590   par_scan_state.end_strong_roots();
 591 
 592   // "evacuate followers".
 593   par_scan_state.evacuate_followers_closure().do_void();
 594 }
 595 
 596 #ifdef _MSC_VER
 597 #pragma warning( push )
 598 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list
 599 #endif
 600 ParNewGeneration::ParNewGeneration(ReservedSpace rs, size_t initial_byte_size)
 601   : DefNewGeneration(rs, initial_byte_size, "PCopy"),
 602   _overflow_list(NULL),
 603   _is_alive_closure(this),
 604   _plab_stats(YoungPLABSize, PLABWeight)
 605 {
 606   NOT_PRODUCT(_overflow_counter = ParGCWorkQueueOverflowInterval;)
 607   NOT_PRODUCT(_num_par_pushes = 0;)
 608   _task_queues = new ObjToScanQueueSet(ParallelGCThreads);


< prev index next >