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/concurrentMarkSweep/cmsCollectorPolicy.cpp
38921 views
1
/*
2
* Copyright (c) 2007, 2014, 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
#include "precompiled.hpp"
26
#include "gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.hpp"
27
#include "gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp"
28
#include "gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.hpp"
29
#include "gc_implementation/parNew/parNewGeneration.hpp"
30
#include "gc_implementation/shared/gcPolicyCounters.hpp"
31
#include "gc_implementation/shared/vmGCOperations.hpp"
32
#include "memory/cardTableRS.hpp"
33
#include "memory/collectorPolicy.hpp"
34
#include "memory/gcLocker.inline.hpp"
35
#include "memory/genCollectedHeap.hpp"
36
#include "memory/generationSpec.hpp"
37
#include "memory/space.hpp"
38
#include "memory/universe.hpp"
39
#include "runtime/arguments.hpp"
40
#include "runtime/globals_extension.hpp"
41
#include "runtime/handles.inline.hpp"
42
#include "runtime/java.hpp"
43
#include "runtime/thread.inline.hpp"
44
#include "runtime/vmThread.hpp"
45
46
//
47
// ConcurrentMarkSweepPolicy methods
48
//
49
50
void ConcurrentMarkSweepPolicy::initialize_alignments() {
51
_space_alignment = _gen_alignment = (uintx)Generation::GenGrain;
52
_heap_alignment = compute_heap_alignment();
53
}
54
55
void ConcurrentMarkSweepPolicy::initialize_generations() {
56
_generations = NEW_C_HEAP_ARRAY3(GenerationSpecPtr, number_of_generations(), mtGC,
57
CURRENT_PC, AllocFailStrategy::RETURN_NULL);
58
if (_generations == NULL)
59
vm_exit_during_initialization("Unable to allocate gen spec");
60
61
if (UseParNewGC) {
62
if (UseAdaptiveSizePolicy) {
63
_generations[0] = new GenerationSpec(Generation::ASParNew,
64
_initial_gen0_size, _max_gen0_size);
65
} else {
66
_generations[0] = new GenerationSpec(Generation::ParNew,
67
_initial_gen0_size, _max_gen0_size);
68
}
69
} else {
70
_generations[0] = new GenerationSpec(Generation::DefNew,
71
_initial_gen0_size, _max_gen0_size);
72
}
73
if (UseAdaptiveSizePolicy) {
74
_generations[1] = new GenerationSpec(Generation::ASConcurrentMarkSweep,
75
_initial_gen1_size, _max_gen1_size);
76
} else {
77
_generations[1] = new GenerationSpec(Generation::ConcurrentMarkSweep,
78
_initial_gen1_size, _max_gen1_size);
79
}
80
81
if (_generations[0] == NULL || _generations[1] == NULL) {
82
vm_exit_during_initialization("Unable to allocate gen spec");
83
}
84
}
85
86
void ConcurrentMarkSweepPolicy::initialize_size_policy(size_t init_eden_size,
87
size_t init_promo_size,
88
size_t init_survivor_size) {
89
double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0;
90
double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0;
91
_size_policy = new CMSAdaptiveSizePolicy(init_eden_size,
92
init_promo_size,
93
init_survivor_size,
94
max_gc_minor_pause_sec,
95
max_gc_pause_sec,
96
GCTimeRatio);
97
}
98
99
void ConcurrentMarkSweepPolicy::initialize_gc_policy_counters() {
100
// initialize the policy counters - 2 collectors, 3 generations
101
if (UseParNewGC) {
102
_gc_policy_counters = new GCPolicyCounters("ParNew:CMS", 2, 3);
103
}
104
else {
105
_gc_policy_counters = new GCPolicyCounters("Copy:CMS", 2, 3);
106
}
107
}
108
109
// Returns true if the incremental mode is enabled.
110
bool ConcurrentMarkSweepPolicy::has_soft_ended_eden()
111
{
112
return CMSIncrementalMode;
113
}
114
115
116
//
117
// ASConcurrentMarkSweepPolicy methods
118
//
119
120
void ASConcurrentMarkSweepPolicy::initialize_gc_policy_counters() {
121
122
assert(size_policy() != NULL, "A size policy is required");
123
// initialize the policy counters - 2 collectors, 3 generations
124
if (UseParNewGC) {
125
_gc_policy_counters = new CMSGCAdaptivePolicyCounters("ParNew:CMS", 2, 3,
126
size_policy());
127
}
128
else {
129
_gc_policy_counters = new CMSGCAdaptivePolicyCounters("Copy:CMS", 2, 3,
130
size_policy());
131
}
132
}
133
134