Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.hpp
40957 views
1
/*
2
* Copyright (c) 2021, Red Hat, 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 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_GC_SHENANDOAH_SHENANDOAHCONCURRENTGC_HPP
26
#define SHARE_GC_SHENANDOAH_SHENANDOAHCONCURRENTGC_HPP
27
28
#include "gc/shared/gcCause.hpp"
29
#include "gc/shenandoah/shenandoahConcurrentMark.hpp"
30
#include "gc/shenandoah/shenandoahGC.hpp"
31
#include "gc/shenandoah/shenandoahHeap.hpp"
32
33
class VM_ShenandoahInitMark;
34
class VM_ShenandoahFinalMarkStartEvac;
35
class VM_ShenandoahInitUpdateRefs;
36
class VM_ShenandoahFinalUpdateRefs;
37
38
class ShenandoahConcurrentGC : public ShenandoahGC {
39
friend class VM_ShenandoahInitMark;
40
friend class VM_ShenandoahFinalMarkStartEvac;
41
friend class VM_ShenandoahInitUpdateRefs;
42
friend class VM_ShenandoahFinalUpdateRefs;
43
friend class VM_ShenandoahFinalRoots;
44
45
private:
46
ShenandoahConcurrentMark _mark;
47
ShenandoahDegenPoint _degen_point;
48
49
public:
50
ShenandoahConcurrentGC();
51
bool collect(GCCause::Cause cause);
52
ShenandoahDegenPoint degen_point() const;
53
54
// Cancel ongoing concurrent GC
55
static void cancel();
56
private:
57
// Entry points to STW GC operations, these cause a related safepoint, that then
58
// call the entry method below
59
void vmop_entry_init_mark();
60
void vmop_entry_final_mark();
61
void vmop_entry_init_updaterefs();
62
void vmop_entry_final_updaterefs();
63
void vmop_entry_final_roots();
64
65
// Entry methods to normally STW GC operations. These set up logging, monitoring
66
// and workers for net VM operation
67
void entry_init_mark();
68
void entry_final_mark();
69
void entry_init_updaterefs();
70
void entry_final_updaterefs();
71
void entry_final_roots();
72
73
// Entry methods to normally concurrent GC operations. These set up logging, monitoring
74
// for concurrent operation.
75
void entry_reset();
76
void entry_mark_roots();
77
void entry_mark();
78
void entry_thread_roots();
79
void entry_weak_refs();
80
void entry_weak_roots();
81
void entry_class_unloading();
82
void entry_strong_roots();
83
void entry_cleanup_early();
84
void entry_evacuate();
85
void entry_update_thread_roots();
86
void entry_updaterefs();
87
void entry_cleanup_complete();
88
89
// Actual work for the phases
90
void op_reset();
91
void op_init_mark();
92
void op_mark_roots();
93
void op_mark();
94
void op_final_mark();
95
void op_thread_roots();
96
void op_weak_refs();
97
void op_weak_roots();
98
void op_class_unloading();
99
void op_strong_roots();
100
void op_cleanup_early();
101
void op_evacuate();
102
void op_init_updaterefs();
103
void op_updaterefs();
104
void op_update_thread_roots();
105
void op_final_updaterefs();
106
void op_final_roots();
107
void op_cleanup_complete();
108
109
// Messages for GC trace events, they have to be immortal for
110
// passing around the logging/tracing systems
111
const char* init_mark_event_message() const;
112
const char* final_mark_event_message() const;
113
const char* conc_mark_event_message() const;
114
115
// Check GC cancellation and abort concurrent GC
116
bool check_cancellation_and_abort(ShenandoahDegenPoint point);
117
};
118
119
#endif // SHARE_GC_SHENANDOAH_SHENANDOAHCONCURRENTGC_HPP
120
121