79
80 _last_gc_cause
81 };
82
83 inline static bool is_user_requested_gc(GCCause::Cause cause) {
84 return (cause == GCCause::_java_lang_system_gc ||
85 cause == GCCause::_dcmd_gc_run);
86 }
87
88 inline static bool is_serviceability_requested_gc(GCCause::Cause
89 cause) {
90 return (cause == GCCause::_jvmti_force_gc ||
91 cause == GCCause::_heap_inspection ||
92 cause == GCCause::_heap_dump);
93 }
94
95 // Causes for collection of the tenured gernation
96 inline static bool is_tenured_allocation_failure_gc(GCCause::Cause cause) {
97 assert(cause != GCCause::_old_generation_too_full_to_scavenge &&
98 cause != GCCause::_old_generation_expanded_on_last_scavenge,
99 err_msg("This GCCause may be correct but is not expected yet: %s",
100 to_string(cause)));
101 // _tenured_generation_full or _cms_generation_full for full tenured generations
102 // _adaptive_size_policy for a full collection after a young GC
103 // _allocation_failure is the generic cause a collection which could result
104 // in the collection of the tenured generation if there is not enough space
105 // in the tenured generation to support a young GC.
106 // _last_ditch_collection is a collection done to include SoftReferences.
107 return (cause == GCCause::_tenured_generation_full ||
108 cause == GCCause::_cms_generation_full ||
109 cause == GCCause::_adaptive_size_policy ||
110 cause == GCCause::_allocation_failure ||
111 cause == GCCause::_last_ditch_collection);
112 }
113
114 // Causes for collection of the young generation
115 inline static bool is_allocation_failure_gc(GCCause::Cause cause) {
116 // _allocation_failure is the generic cause a collection for allocation failure
117 // _adaptive_size_policy is for a collecton done before a full GC
118 // _last_ditch_collection is a collection done to include SoftReferences.
119 return (cause == GCCause::_allocation_failure ||
120 cause == GCCause::_adaptive_size_policy ||
124 // Return a string describing the GCCause.
125 static const char* to_string(GCCause::Cause cause);
126 };
127
128 // Helper class for doing logging that includes the GC Cause
129 // as a string.
130 class GCCauseString : StackObj {
131 private:
132 static const int _length = 128;
133 char _buffer[_length];
134 int _position;
135
136 public:
137 GCCauseString(const char* prefix, GCCause::Cause cause) {
138 if (PrintGCCause) {
139 _position = jio_snprintf(_buffer, _length, "%s (%s) ", prefix, GCCause::to_string(cause));
140 } else {
141 _position = jio_snprintf(_buffer, _length, "%s ", prefix);
142 }
143 assert(_position >= 0 && _position <= _length,
144 err_msg("Need to increase the buffer size in GCCauseString? %d", _position));
145 }
146
147 GCCauseString& append(const char* str) {
148 int res = jio_snprintf(_buffer + _position, _length - _position, "%s", str);
149 _position += res;
150 assert(res >= 0 && _position <= _length,
151 err_msg("Need to increase the buffer size in GCCauseString? %d", res));
152 return *this;
153 }
154
155 operator const char*() {
156 return _buffer;
157 }
158 };
159
160 #endif // SHARE_VM_GC_SHARED_GCCAUSE_HPP
|
79
80 _last_gc_cause
81 };
82
83 inline static bool is_user_requested_gc(GCCause::Cause cause) {
84 return (cause == GCCause::_java_lang_system_gc ||
85 cause == GCCause::_dcmd_gc_run);
86 }
87
88 inline static bool is_serviceability_requested_gc(GCCause::Cause
89 cause) {
90 return (cause == GCCause::_jvmti_force_gc ||
91 cause == GCCause::_heap_inspection ||
92 cause == GCCause::_heap_dump);
93 }
94
95 // Causes for collection of the tenured gernation
96 inline static bool is_tenured_allocation_failure_gc(GCCause::Cause cause) {
97 assert(cause != GCCause::_old_generation_too_full_to_scavenge &&
98 cause != GCCause::_old_generation_expanded_on_last_scavenge,
99 "This GCCause may be correct but is not expected yet: %s",
100 to_string(cause));
101 // _tenured_generation_full or _cms_generation_full for full tenured generations
102 // _adaptive_size_policy for a full collection after a young GC
103 // _allocation_failure is the generic cause a collection which could result
104 // in the collection of the tenured generation if there is not enough space
105 // in the tenured generation to support a young GC.
106 // _last_ditch_collection is a collection done to include SoftReferences.
107 return (cause == GCCause::_tenured_generation_full ||
108 cause == GCCause::_cms_generation_full ||
109 cause == GCCause::_adaptive_size_policy ||
110 cause == GCCause::_allocation_failure ||
111 cause == GCCause::_last_ditch_collection);
112 }
113
114 // Causes for collection of the young generation
115 inline static bool is_allocation_failure_gc(GCCause::Cause cause) {
116 // _allocation_failure is the generic cause a collection for allocation failure
117 // _adaptive_size_policy is for a collecton done before a full GC
118 // _last_ditch_collection is a collection done to include SoftReferences.
119 return (cause == GCCause::_allocation_failure ||
120 cause == GCCause::_adaptive_size_policy ||
124 // Return a string describing the GCCause.
125 static const char* to_string(GCCause::Cause cause);
126 };
127
128 // Helper class for doing logging that includes the GC Cause
129 // as a string.
130 class GCCauseString : StackObj {
131 private:
132 static const int _length = 128;
133 char _buffer[_length];
134 int _position;
135
136 public:
137 GCCauseString(const char* prefix, GCCause::Cause cause) {
138 if (PrintGCCause) {
139 _position = jio_snprintf(_buffer, _length, "%s (%s) ", prefix, GCCause::to_string(cause));
140 } else {
141 _position = jio_snprintf(_buffer, _length, "%s ", prefix);
142 }
143 assert(_position >= 0 && _position <= _length,
144 "Need to increase the buffer size in GCCauseString? %d", _position);
145 }
146
147 GCCauseString& append(const char* str) {
148 int res = jio_snprintf(_buffer + _position, _length - _position, "%s", str);
149 _position += res;
150 assert(res >= 0 && _position <= _length,
151 "Need to increase the buffer size in GCCauseString? %d", res);
152 return *this;
153 }
154
155 operator const char*() {
156 return _buffer;
157 }
158 };
159
160 #endif // SHARE_VM_GC_SHARED_GCCAUSE_HPP
|