1046 1047 // Reason generation was expanded 1048 CMSExpansionCause::Cause _expansion_cause; 1049 1050 // In support of MinChunkSize being larger than min object size 1051 const double _dilatation_factor; 1052 1053 // True if a compacting collection was done. 1054 bool _did_compact; 1055 bool did_compact() { return _did_compact; } 1056 1057 // Fraction of current occupancy at which to start a CMS collection which 1058 // will collect this generation (at least). 1059 double _initiating_occupancy; 1060 1061 protected: 1062 // Shrink generation by specified size (returns false if unable to shrink) 1063 void shrink_free_list_by(size_t bytes); 1064 1065 // Update statistics for GC 1066 virtual void update_gc_stats(int level, bool full); 1067 1068 // Maximum available space in the generation (including uncommitted) 1069 // space. 1070 size_t max_available() const; 1071 1072 // getter and initializer for _initiating_occupancy field. 1073 double initiating_occupancy() const { return _initiating_occupancy; } 1074 void init_initiating_occupancy(intx io, uintx tr); 1075 1076 void expand_for_gc_cause(size_t bytes, size_t expand_bytes, CMSExpansionCause::Cause cause); 1077 1078 void assert_correct_size_change_locking(); 1079 1080 public: 1081 ConcurrentMarkSweepGeneration(ReservedSpace rs, size_t initial_byte_size, 1082 int level, CardTableRS* ct, 1083 bool use_adaptive_freelists, 1084 FreeBlockDictionary<FreeChunk>::DictionaryChoice); 1085 1086 // Accessors 1087 CMSCollector* collector() const { return _collector; } 1088 static void set_collector(CMSCollector* collector) { 1089 assert(_collector == NULL, "already set"); 1090 _collector = collector; 1091 } 1092 CompactibleFreeListSpace* cmsSpace() const { return _cmsSpace; } 1093 1094 Mutex* freelistLock() const; 1095 1096 virtual Generation::Name kind() { return Generation::ConcurrentMarkSweep; } 1097 1098 void set_did_compact(bool v) { _did_compact = v; } 1099 1100 bool refs_discovery_is_atomic() const { return false; } 1101 bool refs_discovery_is_mt() const { 1102 // Note: CMS does MT-discovery during the parallel-remark | 1046 1047 // Reason generation was expanded 1048 CMSExpansionCause::Cause _expansion_cause; 1049 1050 // In support of MinChunkSize being larger than min object size 1051 const double _dilatation_factor; 1052 1053 // True if a compacting collection was done. 1054 bool _did_compact; 1055 bool did_compact() { return _did_compact; } 1056 1057 // Fraction of current occupancy at which to start a CMS collection which 1058 // will collect this generation (at least). 1059 double _initiating_occupancy; 1060 1061 protected: 1062 // Shrink generation by specified size (returns false if unable to shrink) 1063 void shrink_free_list_by(size_t bytes); 1064 1065 // Update statistics for GC 1066 virtual void update_gc_stats(Generation* current_generation, bool full); 1067 1068 // Maximum available space in the generation (including uncommitted) 1069 // space. 1070 size_t max_available() const; 1071 1072 // getter and initializer for _initiating_occupancy field. 1073 double initiating_occupancy() const { return _initiating_occupancy; } 1074 void init_initiating_occupancy(intx io, uintx tr); 1075 1076 void expand_for_gc_cause(size_t bytes, size_t expand_bytes, CMSExpansionCause::Cause cause); 1077 1078 void assert_correct_size_change_locking(); 1079 1080 public: 1081 ConcurrentMarkSweepGeneration(ReservedSpace rs, size_t initial_byte_size, 1082 CardTableRS* ct, 1083 bool use_adaptive_freelists, 1084 FreeBlockDictionary<FreeChunk>::DictionaryChoice); 1085 1086 // Accessors 1087 CMSCollector* collector() const { return _collector; } 1088 static void set_collector(CMSCollector* collector) { 1089 assert(_collector == NULL, "already set"); 1090 _collector = collector; 1091 } 1092 CompactibleFreeListSpace* cmsSpace() const { return _cmsSpace; } 1093 1094 Mutex* freelistLock() const; 1095 1096 virtual Generation::Name kind() { return Generation::ConcurrentMarkSweep; } 1097 1098 void set_did_compact(bool v) { _did_compact = v; } 1099 1100 bool refs_discovery_is_atomic() const { return false; } 1101 bool refs_discovery_is_mt() const { 1102 // Note: CMS does MT-discovery during the parallel-remark |