Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/gc_implementation/shenandoah/shenandoahCollectorPolicy.hpp
38920 views
1
/*
2
* Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
3
*
4
* This code is free software; you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 2 only, as
6
* published by the Free Software Foundation.
7
*
8
* This code is distributed in the hope that it will be useful, but WITHOUT
9
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
11
* version 2 for more details (a copy is included in the LICENSE file that
12
* accompanied this code).
13
*
14
* You should have received a copy of the GNU General Public License version
15
* 2 along with this work; if not, write to the Free Software Foundation,
16
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17
*
18
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19
* or visit www.oracle.com if you need additional information or have any
20
* questions.
21
*
22
*/
23
24
#ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHCOLLECTORPOLICY_HPP
25
#define SHARE_VM_GC_SHENANDOAH_SHENANDOAHCOLLECTORPOLICY_HPP
26
27
#include "memory/collectorPolicy.hpp"
28
#include "gc_implementation/shared/gcTrace.hpp"
29
#include "gc_implementation/shenandoah/shenandoahHeap.hpp"
30
#include "utilities/ostream.hpp"
31
32
class STWGCTimer;
33
class ConcurrentGCTimer;
34
35
class ShenandoahTracer : public GCTracer {
36
public:
37
ShenandoahTracer() : GCTracer(Shenandoah) {}
38
};
39
40
class ShenandoahCollectorPolicy: public CollectorPolicy {
41
private:
42
size_t _success_concurrent_gcs;
43
size_t _success_degenerated_gcs;
44
size_t _success_full_gcs;
45
size_t _alloc_failure_degenerated;
46
size_t _alloc_failure_degenerated_upgrade_to_full;
47
size_t _alloc_failure_full;
48
size_t _explicit_concurrent;
49
size_t _explicit_full;
50
size_t _implicit_concurrent;
51
size_t _implicit_full;
52
size_t _degen_points[ShenandoahHeap::_DEGENERATED_LIMIT];
53
54
ShenandoahSharedFlag _in_shutdown;
55
56
ShenandoahTracer* _tracer;
57
58
size_t _cycle_counter;
59
60
public:
61
ShenandoahCollectorPolicy();
62
63
void post_heap_initialize() {};
64
65
BarrierSet::Name barrier_set_name();
66
67
HeapWord* mem_allocate_work(size_t size,
68
bool is_tlab,
69
bool* gc_overhead_limit_was_exceeded);
70
71
HeapWord* satisfy_failed_allocation(size_t size, bool is_tlab);
72
73
MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data,
74
size_t size,
75
Metaspace::MetadataType mdtype);
76
77
void initialize_alignments();
78
79
// TODO: This is different from gc_end: that one encompasses one VM operation.
80
// These two encompass the entire cycle.
81
void record_cycle_start();
82
83
void record_success_concurrent();
84
void record_success_degenerated();
85
void record_success_full();
86
void record_alloc_failure_to_degenerated(ShenandoahHeap::ShenandoahDegenPoint point);
87
void record_alloc_failure_to_full();
88
void record_degenerated_upgrade_to_full();
89
void record_explicit_to_concurrent();
90
void record_explicit_to_full();
91
void record_implicit_to_concurrent();
92
void record_implicit_to_full();
93
94
void record_shutdown();
95
bool is_at_shutdown();
96
97
ShenandoahTracer* tracer() {return _tracer;}
98
99
size_t cycle_counter() const;
100
101
void print_gc_stats(outputStream* out) const;
102
};
103
104
#endif // SHARE_VM_GC_SHENANDOAH_SHENANDOAHCOLLECTORPOLICY_HPP
105
106