duke@435: /* trims@1907: * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved. duke@435: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. duke@435: * duke@435: * This code is free software; you can redistribute it and/or modify it duke@435: * under the terms of the GNU General Public License version 2 only, as duke@435: * published by the Free Software Foundation. duke@435: * duke@435: * This code is distributed in the hope that it will be useful, but WITHOUT duke@435: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or duke@435: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License duke@435: * version 2 for more details (a copy is included in the LICENSE file that duke@435: * accompanied this code). duke@435: * duke@435: * You should have received a copy of the GNU General Public License version duke@435: * 2 along with this work; if not, write to the Free Software Foundation, duke@435: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. duke@435: * trims@1907: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA trims@1907: * or visit www.oracle.com if you need additional information or have any trims@1907: * questions. duke@435: * duke@435: */ duke@435: duke@435: # include "incls/_precompiled.incl" duke@435: # include "incls/_gcCause.cpp.incl" duke@435: duke@435: const char* GCCause::to_string(GCCause::Cause cause) { duke@435: switch (cause) { duke@435: case _java_lang_system_gc: duke@435: return "System.gc()"; duke@435: duke@435: case _full_gc_alot: duke@435: return "FullGCAlot"; duke@435: duke@435: case _scavenge_alot: duke@435: return "ScavengeAlot"; duke@435: duke@435: case _allocation_profiler: duke@435: return "Allocation Profiler"; duke@435: duke@435: case _jvmti_force_gc: duke@435: return "JvmtiEnv ForceGarbageCollection"; duke@435: duke@435: case _no_gc: duke@435: return "No GC"; duke@435: duke@435: case _allocation_failure: duke@435: return "Allocation Failure"; duke@435: duke@435: case _gc_locker: duke@435: return "GCLocker Initiated GC"; duke@435: duke@435: case _heap_inspection: duke@435: return "Heap Inspection Initiated GC"; duke@435: duke@435: case _heap_dump: duke@435: return "Heap Dump Initiated GC"; duke@435: duke@435: case _tenured_generation_full: duke@435: return "Tenured Generation Full"; duke@435: duke@435: case _permanent_generation_full: duke@435: return "Permanent Generation Full"; duke@435: duke@435: case _cms_generation_full: duke@435: return "CMS Generation Full"; duke@435: duke@435: case _cms_initial_mark: duke@435: return "CMS Initial Mark"; duke@435: duke@435: case _cms_final_remark: duke@435: return "CMS Final Remark"; duke@435: duke@435: case _old_generation_expanded_on_last_scavenge: duke@435: return "Old Generation Expanded On Last Scavenge"; duke@435: duke@435: case _old_generation_too_full_to_scavenge: duke@435: return "Old Generation Too Full To Scavenge"; duke@435: duke@435: case _last_ditch_collection: duke@435: return "Last ditch collection"; duke@435: duke@435: case _last_gc_cause: duke@435: return "ILLEGAL VALUE - last gc cause - ILLEGAL VALUE"; duke@435: duke@435: default: duke@435: return "unknown GCCause"; duke@435: } duke@435: ShouldNotReachHere(); duke@435: } duke@435: duke@435: #ifndef PRODUCT duke@435: duke@435: bool GCCause::is_for_full_collection(GCCause::Cause cause) { duke@435: bool result; duke@435: duke@435: // There are more GCCause::Cause types than listed here. duke@435: // For brevity, we list only those that cause full collections. duke@435: switch (cause) { duke@435: case _allocation_failure: duke@435: case _tenured_generation_full: duke@435: case _permanent_generation_full: duke@435: case _cms_generation_full: duke@435: case _last_ditch_collection: duke@435: result = true; duke@435: break; duke@435: duke@435: default: duke@435: result = false; duke@435: break; duke@435: } duke@435: return result; duke@435: } duke@435: duke@435: #endif // PRODUCT