0
|
1 /*
|
|
2 * Copyright 2002-2005 Sun Microsystems, Inc. All Rights Reserved.
|
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
4 *
|
|
5 * This code is free software; you can redistribute it and/or modify it
|
|
6 * under the terms of the GNU General Public License version 2 only, as
|
|
7 * published by the Free Software Foundation.
|
|
8 *
|
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT
|
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
12 * version 2 for more details (a copy is included in the LICENSE file that
|
|
13 * accompanied this code).
|
|
14 *
|
|
15 * You should have received a copy of the GNU General Public License version
|
|
16 * 2 along with this work; if not, write to the Free Software Foundation,
|
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
18 *
|
|
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
|
20 * CA 95054 USA or visit www.sun.com if you need additional information or
|
|
21 * have any questions.
|
|
22 *
|
|
23 */
|
|
24
|
|
25 # include "incls/_precompiled.incl"
|
|
26 # include "incls/_gcCause.cpp.incl"
|
|
27
|
|
28 const char* GCCause::to_string(GCCause::Cause cause) {
|
|
29 switch (cause) {
|
|
30 case _java_lang_system_gc:
|
|
31 return "System.gc()";
|
|
32
|
|
33 case _full_gc_alot:
|
|
34 return "FullGCAlot";
|
|
35
|
|
36 case _scavenge_alot:
|
|
37 return "ScavengeAlot";
|
|
38
|
|
39 case _allocation_profiler:
|
|
40 return "Allocation Profiler";
|
|
41
|
|
42 case _jvmti_force_gc:
|
|
43 return "JvmtiEnv ForceGarbageCollection";
|
|
44
|
|
45 case _no_gc:
|
|
46 return "No GC";
|
|
47
|
|
48 case _allocation_failure:
|
|
49 return "Allocation Failure";
|
|
50
|
|
51 case _gc_locker:
|
|
52 return "GCLocker Initiated GC";
|
|
53
|
|
54 case _heap_inspection:
|
|
55 return "Heap Inspection Initiated GC";
|
|
56
|
|
57 case _heap_dump:
|
|
58 return "Heap Dump Initiated GC";
|
|
59
|
|
60 case _tenured_generation_full:
|
|
61 return "Tenured Generation Full";
|
|
62
|
|
63 case _permanent_generation_full:
|
|
64 return "Permanent Generation Full";
|
|
65
|
|
66 case _cms_generation_full:
|
|
67 return "CMS Generation Full";
|
|
68
|
|
69 case _cms_initial_mark:
|
|
70 return "CMS Initial Mark";
|
|
71
|
|
72 case _cms_final_remark:
|
|
73 return "CMS Final Remark";
|
|
74
|
|
75 case _old_generation_expanded_on_last_scavenge:
|
|
76 return "Old Generation Expanded On Last Scavenge";
|
|
77
|
|
78 case _old_generation_too_full_to_scavenge:
|
|
79 return "Old Generation Too Full To Scavenge";
|
|
80
|
|
81 case _last_ditch_collection:
|
|
82 return "Last ditch collection";
|
|
83
|
|
84 case _last_gc_cause:
|
|
85 return "ILLEGAL VALUE - last gc cause - ILLEGAL VALUE";
|
|
86
|
|
87 default:
|
|
88 return "unknown GCCause";
|
|
89 }
|
|
90 ShouldNotReachHere();
|
|
91 }
|
|
92
|
|
93 #ifndef PRODUCT
|
|
94
|
|
95 bool GCCause::is_for_full_collection(GCCause::Cause cause) {
|
|
96 bool result;
|
|
97
|
|
98 // There are more GCCause::Cause types than listed here.
|
|
99 // For brevity, we list only those that cause full collections.
|
|
100 switch (cause) {
|
|
101 case _allocation_failure:
|
|
102 case _tenured_generation_full:
|
|
103 case _permanent_generation_full:
|
|
104 case _cms_generation_full:
|
|
105 case _last_ditch_collection:
|
|
106 result = true;
|
|
107 break;
|
|
108
|
|
109 default:
|
|
110 result = false;
|
|
111 break;
|
|
112 }
|
|
113 return result;
|
|
114 }
|
|
115
|
|
116 #endif // PRODUCT
|