772 }
773 }
774 assert( ( _survivor_plab_array != NULL
775 && _survivor_chunk_array != NULL)
776 || ( _survivor_chunk_capacity == 0
777 && _survivor_chunk_index == 0),
778 "Error");
779
780 // Choose what strong roots should be scanned depending on verification options
781 if (!CMSClassUnloadingEnabled) {
782 // If class unloading is disabled we want to include all classes into the root set.
783 add_root_scanning_option(SharedHeap::SO_AllClasses);
784 } else {
785 add_root_scanning_option(SharedHeap::SO_SystemClasses);
786 }
787
788 NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;)
789 _gc_counters = new CollectorCounters("CMS", 1);
790 _completed_initialization = true;
791 _inter_sweep_timer.start(); // start of time
792 #ifdef SPARC
793 // Issue a stern warning, but allow use for experimentation and debugging.
794 if (VM_Version::is_sun4v() && UseMemSetInBOT) {
795 assert(!FLAG_IS_DEFAULT(UseMemSetInBOT), "Error");
796 warning("Experimental flag -XX:+UseMemSetInBOT is known to cause instability"
797 " on sun4v; please understand that you are using at your own risk!");
798 }
799 #endif
800 }
801
802 const char* ConcurrentMarkSweepGeneration::name() const {
803 return "concurrent mark-sweep generation";
804 }
805 void ConcurrentMarkSweepGeneration::update_counters() {
806 if (UsePerfData) {
807 _space_counters->update_all();
808 _gen_counters->update_all();
809 }
810 }
811
812 // this is an optimized version of update_counters(). it takes the
813 // used value as a parameter rather than computing it.
814 //
815 void ConcurrentMarkSweepGeneration::update_counters(size_t used) {
816 if (UsePerfData) {
817 _space_counters->update_used(used);
818 _space_counters->update_capacity();
819 _gen_counters->update_all();
|
772 }
773 }
774 assert( ( _survivor_plab_array != NULL
775 && _survivor_chunk_array != NULL)
776 || ( _survivor_chunk_capacity == 0
777 && _survivor_chunk_index == 0),
778 "Error");
779
780 // Choose what strong roots should be scanned depending on verification options
781 if (!CMSClassUnloadingEnabled) {
782 // If class unloading is disabled we want to include all classes into the root set.
783 add_root_scanning_option(SharedHeap::SO_AllClasses);
784 } else {
785 add_root_scanning_option(SharedHeap::SO_SystemClasses);
786 }
787
788 NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;)
789 _gc_counters = new CollectorCounters("CMS", 1);
790 _completed_initialization = true;
791 _inter_sweep_timer.start(); // start of time
792 }
793
794 const char* ConcurrentMarkSweepGeneration::name() const {
795 return "concurrent mark-sweep generation";
796 }
797 void ConcurrentMarkSweepGeneration::update_counters() {
798 if (UsePerfData) {
799 _space_counters->update_all();
800 _gen_counters->update_all();
801 }
802 }
803
804 // this is an optimized version of update_counters(). it takes the
805 // used value as a parameter rather than computing it.
806 //
807 void ConcurrentMarkSweepGeneration::update_counters(size_t used) {
808 if (UsePerfData) {
809 _space_counters->update_used(used);
810 _space_counters->update_capacity();
811 _gen_counters->update_all();
|