1/*
2 * Copyright (c) 2017, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#ifndef SHARE_VM_GC_G1_G1FULLGCSCOPE_HPP
26#define SHARE_VM_GC_G1_G1FULLGCSCOPE_HPP
27
28#include "gc/g1/g1CollectedHeap.hpp"
29#include "gc/g1/g1HeapTransition.hpp"
30#include "gc/shared/collectorCounters.hpp"
31#include "gc/shared/gcId.hpp"
32#include "gc/shared/gcTrace.hpp"
33#include "gc/shared/gcTraceTime.hpp"
34#include "gc/shared/gcTimer.hpp"
35#include "gc/shared/isGCActiveMark.hpp"
36#include "gc/shared/vmGCOperations.hpp"
37#include "memory/allocation.hpp"
38#include "services/memoryService.hpp"
39
40// Class used to group scoped objects used in the Full GC together.
41class G1FullGCScope : public StackObj {
42  ResourceMark            _rm;
43  bool                    _explicit_gc;
44  G1CollectedHeap*        _g1h;
45  GCIdMark                _gc_id;
46  SvcGCMarker             _svc_marker;
47  STWGCTimer              _timer;
48  SerialOldTracer         _tracer;
49  IsGCActiveMark          _active;
50  GCTraceCPUTime          _cpu_time;
51  ClearedAllSoftRefs      _soft_refs;
52  TraceCollectorStats     _collector_stats;
53  TraceMemoryManagerStats _memory_stats;
54  G1HeapTransition        _heap_transition;
55
56  // Singleton instance.
57  static G1FullGCScope* _instance;
58public:
59  static G1FullGCScope* instance();
60
61  G1FullGCScope(bool explicit_gc, bool clear_soft);
62  ~G1FullGCScope();
63
64  bool is_explicit_gc();
65  bool should_clear_soft_refs();
66
67  STWGCTimer* timer();
68  SerialOldTracer* tracer();
69  G1HeapTransition* heap_transition();
70};
71
72#endif //SHARE_VM_GC_G1_G1FULLGCSCOPE_HPP
73