author | hseigel |
Tue, 16 Oct 2018 11:08:46 -0400 | |
changeset 52148 | 2d9f8845d0ae |
parent 49710 | f67333fc42bd |
child 52904 | d2f118d3f8e7 |
permissions | -rw-r--r-- |
47901
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
1 |
/* |
52148
2d9f8845d0ae
7041262: VM_Version should be called instead of Abstract_VM_Version so that overriding works
hseigel
parents:
49710
diff
changeset
|
2 |
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. |
47901
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
3 |
* Copyright (c) 2017, Red Hat, Inc. and/or its affiliates. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
4 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
5 |
* |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
6 |
* This code is free software; you can redistribute it and/or modify it |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
7 |
* under the terms of the GNU General Public License version 2 only, as |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
8 |
* published by the Free Software Foundation. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
9 |
* |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
10 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
11 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
12 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
13 |
* version 2 for more details (a copy is included in the LICENSE file that |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
14 |
* accompanied this code). |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
15 |
* |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
16 |
* You should have received a copy of the GNU General Public License version |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
17 |
* 2 along with this work; if not, write to the Free Software Foundation, |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
18 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
19 |
* |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
20 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
21 |
* or visit www.oracle.com if you need additional information or have any |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
22 |
* questions. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
23 |
* |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
24 |
*/ |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
25 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
26 |
#include "precompiled.hpp" |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
27 |
#include "gc/cms/cmsArguments.hpp" |
47913 | 28 |
#include "gc/cms/cmsCollectorPolicy.hpp" |
29 |
#include "gc/cms/cmsHeap.hpp" |
|
47901
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
30 |
#include "gc/cms/compactibleFreeListSpace.hpp" |
47913 | 31 |
#include "gc/shared/gcArguments.inline.hpp" |
47901
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
32 |
#include "gc/shared/genCollectedHeap.hpp" |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
33 |
#include "runtime/arguments.hpp" |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
34 |
#include "runtime/globals.hpp" |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
35 |
#include "runtime/globals_extension.hpp" |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
36 |
#include "runtime/vm_version.hpp" |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
37 |
#include "utilities/defaultStream.hpp" |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
38 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
39 |
size_t CMSArguments::conservative_max_heap_alignment() { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
40 |
return GenCollectedHeap::conservative_max_heap_alignment(); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
41 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
42 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
43 |
void CMSArguments::set_parnew_gc_flags() { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
44 |
assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC && !UseG1GC, |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
45 |
"control point invariant"); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
46 |
assert(UseConcMarkSweepGC, "CMS is expected to be on here"); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
47 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
48 |
if (FLAG_IS_DEFAULT(ParallelGCThreads)) { |
52148
2d9f8845d0ae
7041262: VM_Version should be called instead of Abstract_VM_Version so that overriding works
hseigel
parents:
49710
diff
changeset
|
49 |
FLAG_SET_DEFAULT(ParallelGCThreads, VM_Version::parallel_worker_threads()); |
47901
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
50 |
assert(ParallelGCThreads > 0, "We should always have at least one thread by default"); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
51 |
} else if (ParallelGCThreads == 0) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
52 |
jio_fprintf(defaultStream::error_stream(), |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
53 |
"The ParNew GC can not be combined with -XX:ParallelGCThreads=0\n"); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
54 |
vm_exit(1); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
55 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
56 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
57 |
// By default YoungPLABSize and OldPLABSize are set to 4096 and 1024 respectively, |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
58 |
// these settings are default for Parallel Scavenger. For ParNew+Tenured configuration |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
59 |
// we set them to 1024 and 1024. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
60 |
// See CR 6362902. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
61 |
if (FLAG_IS_DEFAULT(YoungPLABSize)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
62 |
FLAG_SET_DEFAULT(YoungPLABSize, (intx)1024); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
63 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
64 |
if (FLAG_IS_DEFAULT(OldPLABSize)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
65 |
FLAG_SET_DEFAULT(OldPLABSize, (intx)1024); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
66 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
67 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
68 |
// When using compressed oops, we use local overflow stacks, |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
69 |
// rather than using a global overflow list chained through |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
70 |
// the klass word of the object's pre-image. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
71 |
if (UseCompressedOops && !ParGCUseLocalOverflow) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
72 |
if (!FLAG_IS_DEFAULT(ParGCUseLocalOverflow)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
73 |
warning("Forcing +ParGCUseLocalOverflow: needed if using compressed references"); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
74 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
75 |
FLAG_SET_DEFAULT(ParGCUseLocalOverflow, true); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
76 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
77 |
assert(ParGCUseLocalOverflow || !UseCompressedOops, "Error"); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
78 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
79 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
80 |
// Adjust some sizes to suit CMS and/or ParNew needs; these work well on |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
81 |
// sparc/solaris for certain applications, but would gain from |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
82 |
// further optimization and tuning efforts, and would almost |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
83 |
// certainly gain from analysis of platform and environment. |
49629
b786280276dc
8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
47913
diff
changeset
|
84 |
void CMSArguments::initialize() { |
b786280276dc
8199925: Break out GC selection logic from GCArguments to GCConfig
pliden
parents:
47913
diff
changeset
|
85 |
GCArguments::initialize(); |
49710
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
86 |
|
47901
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
87 |
assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC, "Error"); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
88 |
assert(UseConcMarkSweepGC, "CMS is expected to be on here"); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
89 |
|
49710
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
90 |
// CMS space iteration, which FLSVerifyAllHeapreferences entails, |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
91 |
// insists that we hold the requisite locks so that the iteration is |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
92 |
// MT-safe. For the verification at start-up and shut-down, we don't |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
93 |
// yet have a good way of acquiring and releasing these locks, |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
94 |
// which are not visible at the CollectedHeap level. We want to |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
95 |
// be able to acquire these locks and then do the iteration rather |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
96 |
// than just disable the lock verification. This will be fixed under |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
97 |
// bug 4788986. |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
98 |
if (UseConcMarkSweepGC && FLSVerifyAllHeapReferences) { |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
99 |
if (VerifyDuringStartup) { |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
100 |
warning("Heap verification at start-up disabled " |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
101 |
"(due to current incompatibility with FLSVerifyAllHeapReferences)"); |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
102 |
VerifyDuringStartup = false; // Disable verification at start-up |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
103 |
} |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
104 |
|
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
105 |
if (VerifyBeforeExit) { |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
106 |
warning("Heap verification at shutdown disabled " |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
107 |
"(due to current incompatibility with FLSVerifyAllHeapReferences)"); |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
108 |
VerifyBeforeExit = false; // Disable verification at shutdown |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
109 |
} |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
110 |
} |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
111 |
|
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
112 |
if (!ClassUnloading) { |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
113 |
FLAG_SET_CMDLINE(bool, CMSClassUnloadingEnabled, false); |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
114 |
} |
f67333fc42bd
8200737: Move GC code out of Arguments::check_vm_args_consistency into GCArguments
stefank
parents:
49629
diff
changeset
|
115 |
|
47901
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
116 |
// Set CMS global values |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
117 |
CompactibleFreeListSpace::set_cms_values(); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
118 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
119 |
// Turn off AdaptiveSizePolicy by default for cms until it is complete. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
120 |
disable_adaptive_size_policy("UseConcMarkSweepGC"); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
121 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
122 |
set_parnew_gc_flags(); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
123 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
124 |
size_t max_heap = align_down(MaxHeapSize, |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
125 |
CardTableRS::ct_max_alignment_constraint()); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
126 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
127 |
// Now make adjustments for CMS |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
128 |
intx tenuring_default = (intx)6; |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
129 |
size_t young_gen_per_worker = CMSYoungGenPerWorker; |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
130 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
131 |
// Preferred young gen size for "short" pauses: |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
132 |
// upper bound depends on # of threads and NewRatio. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
133 |
const size_t preferred_max_new_size_unaligned = |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
134 |
MIN2(max_heap/(NewRatio+1), ScaleForWordSize(young_gen_per_worker * ParallelGCThreads)); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
135 |
size_t preferred_max_new_size = |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
136 |
align_up(preferred_max_new_size_unaligned, os::vm_page_size()); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
137 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
138 |
// Unless explicitly requested otherwise, size young gen |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
139 |
// for "short" pauses ~ CMSYoungGenPerWorker*ParallelGCThreads |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
140 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
141 |
// If either MaxNewSize or NewRatio is set on the command line, |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
142 |
// assume the user is trying to set the size of the young gen. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
143 |
if (FLAG_IS_DEFAULT(MaxNewSize) && FLAG_IS_DEFAULT(NewRatio)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
144 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
145 |
// Set MaxNewSize to our calculated preferred_max_new_size unless |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
146 |
// NewSize was set on the command line and it is larger than |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
147 |
// preferred_max_new_size. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
148 |
if (!FLAG_IS_DEFAULT(NewSize)) { // NewSize explicitly set at command-line |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
149 |
FLAG_SET_ERGO(size_t, MaxNewSize, MAX2(NewSize, preferred_max_new_size)); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
150 |
} else { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
151 |
FLAG_SET_ERGO(size_t, MaxNewSize, preferred_max_new_size); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
152 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
153 |
log_trace(gc, heap)("CMS ergo set MaxNewSize: " SIZE_FORMAT, MaxNewSize); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
154 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
155 |
// Code along this path potentially sets NewSize and OldSize |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
156 |
log_trace(gc, heap)("CMS set min_heap_size: " SIZE_FORMAT " initial_heap_size: " SIZE_FORMAT " max_heap: " SIZE_FORMAT, |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
157 |
Arguments::min_heap_size(), InitialHeapSize, max_heap); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
158 |
size_t min_new = preferred_max_new_size; |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
159 |
if (FLAG_IS_CMDLINE(NewSize)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
160 |
min_new = NewSize; |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
161 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
162 |
if (max_heap > min_new && Arguments::min_heap_size() > min_new) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
163 |
// Unless explicitly requested otherwise, make young gen |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
164 |
// at least min_new, and at most preferred_max_new_size. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
165 |
if (FLAG_IS_DEFAULT(NewSize)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
166 |
FLAG_SET_ERGO(size_t, NewSize, MAX2(NewSize, min_new)); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
167 |
FLAG_SET_ERGO(size_t, NewSize, MIN2(preferred_max_new_size, NewSize)); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
168 |
log_trace(gc, heap)("CMS ergo set NewSize: " SIZE_FORMAT, NewSize); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
169 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
170 |
// Unless explicitly requested otherwise, size old gen |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
171 |
// so it's NewRatio x of NewSize. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
172 |
if (FLAG_IS_DEFAULT(OldSize)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
173 |
if (max_heap > NewSize) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
174 |
FLAG_SET_ERGO(size_t, OldSize, MIN2(NewRatio*NewSize, max_heap - NewSize)); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
175 |
log_trace(gc, heap)("CMS ergo set OldSize: " SIZE_FORMAT, OldSize); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
176 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
177 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
178 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
179 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
180 |
// Unless explicitly requested otherwise, definitely |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
181 |
// promote all objects surviving "tenuring_default" scavenges. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
182 |
if (FLAG_IS_DEFAULT(MaxTenuringThreshold) && |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
183 |
FLAG_IS_DEFAULT(SurvivorRatio)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
184 |
FLAG_SET_ERGO(uintx, MaxTenuringThreshold, tenuring_default); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
185 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
186 |
// If we decided above (or user explicitly requested) |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
187 |
// `promote all' (via MaxTenuringThreshold := 0), |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
188 |
// prefer minuscule survivor spaces so as not to waste |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
189 |
// space for (non-existent) survivors |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
190 |
if (FLAG_IS_DEFAULT(SurvivorRatio) && MaxTenuringThreshold == 0) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
191 |
FLAG_SET_ERGO(uintx, SurvivorRatio, MAX2((uintx)1024, SurvivorRatio)); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
192 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
193 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
194 |
// OldPLABSize is interpreted in CMS as not the size of the PLAB in words, |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
195 |
// but rather the number of free blocks of a given size that are used when |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
196 |
// replenishing the local per-worker free list caches. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
197 |
if (FLAG_IS_DEFAULT(OldPLABSize)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
198 |
if (!FLAG_IS_DEFAULT(ResizeOldPLAB) && !ResizeOldPLAB) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
199 |
// OldPLAB sizing manually turned off: Use a larger default setting, |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
200 |
// unless it was manually specified. This is because a too-low value |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
201 |
// will slow down scavenges. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
202 |
FLAG_SET_ERGO(size_t, OldPLABSize, CompactibleFreeListSpaceLAB::_default_static_old_plab_size); // default value before 6631166 |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
203 |
} else { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
204 |
FLAG_SET_DEFAULT(OldPLABSize, CompactibleFreeListSpaceLAB::_default_dynamic_old_plab_size); // old CMSParPromoteBlocksToClaim default |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
205 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
206 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
207 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
208 |
// If either of the static initialization defaults have changed, note this |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
209 |
// modification. |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
210 |
if (!FLAG_IS_DEFAULT(OldPLABSize) || !FLAG_IS_DEFAULT(OldPLABWeight)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
211 |
CompactibleFreeListSpaceLAB::modify_initialization(OldPLABSize, OldPLABWeight); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
212 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
213 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
214 |
log_trace(gc)("MarkStackSize: %uk MarkStackSizeMax: %uk", (unsigned int) (MarkStackSize / K), (uint) (MarkStackSizeMax / K)); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
215 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
216 |
|
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
217 |
void CMSArguments::disable_adaptive_size_policy(const char* collector_name) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
218 |
if (UseAdaptiveSizePolicy) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
219 |
if (FLAG_IS_CMDLINE(UseAdaptiveSizePolicy)) { |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
220 |
warning("Disabling UseAdaptiveSizePolicy; it is incompatible with %s.", |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
221 |
collector_name); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
222 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
223 |
FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false); |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
224 |
} |
4c42aa431f40
8189171: Move GC argument processing into GC specific classes
rkennke
parents:
diff
changeset
|
225 |
} |
47913 | 226 |
|
227 |
CollectedHeap* CMSArguments::create_heap() { |
|
228 |
return create_heap_with_policy<CMSHeap, ConcurrentMarkSweepPolicy>(); |
|
229 |
} |