1 /*
2 * Copyright (c) 2022, 2025, 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_CDS_CDS_GLOBALS_HPP
26 #define SHARE_CDS_CDS_GLOBALS_HPP
27
28 #include "runtime/globals_shared.hpp"
29
30 //
31 // Defines all globals flags used by CDS.
32 //
33
34 #define CDS_FLAGS(develop, \
35 develop_pd, \
36 product, \
37 product_pd, \
38 range, \
39 constraint) \
40 /* Shared spaces */ \
41 \
42 product(bool, VerifySharedSpaces, false, \
43 "Verify integrity of shared spaces") \
44 \
45 product(bool, RecordDynamicDumpInfo, false, \
46 "Record class info for jcmd VM.cds dynamic_dump") \
47 \
48 product(bool, AutoCreateSharedArchive, false, \
49 "Create shared archive at exit if cds mapping failed") \
50 \
51 product(bool, PrintSharedArchiveAndExit, false, \
52 "Print shared archive file contents") \
53 \
54 product(size_t, SharedBaseAddress, LP64_ONLY(32*G) \
55 NOT_LP64(LINUX_ONLY(2*G) NOT_LINUX(0)), \
56 "Address to allocate shared memory region for class data") \
57 range(0, SIZE_MAX) \
58 \
59 product(ccstr, SharedArchiveConfigFile, nullptr, \
60 "Data to add to the CDS archive file") \
61 \
62 product(uint, SharedSymbolTableBucketSize, 4, \
63 "Average number of symbols per bucket in shared table") \
64 range(2, 246) \
65 \
66 develop(ccstr, ArchiveHeapTestClass, nullptr, \
67 "For JVM internal testing only. The static field named " \
68 "\"archivedObjects\" of the specified class is stored in the " \
69 "CDS archive heap") \
70 \
71 develop(ccstr, AOTInitTestClass, nullptr, \
72 "For JVM internal testing only. The specified class is stored " \
73 "in the initialized state in the AOT cache ") \
74 \
75 product(ccstr, DumpLoadedClassList, nullptr, \
76 "Dump the names all loaded classes, that could be stored into " \
77 "the CDS archive, in the specified file") \
78 \
79 product(bool, AOTStreamableObjects, false, DIAGNOSTIC, \
80 "Archive the Java heap in a generic streamable object format") \
81 \
82 product(bool, AOTEagerlyLoadObjects, false, DIAGNOSTIC, \
83 "Load streamable objects synchronously without concurrency") \
84 \
85 product(ccstr, SharedClassListFile, nullptr, \
86 "Override the default CDS class list") \
87 \
88 product(ccstr, SharedArchiveFile, nullptr, \
89 "Override the default location of the CDS archive file") \
90 \
91 product(ccstr, ArchiveClassesAtExit, nullptr, \
92 "The path and name of the dynamic archive file") \
93 \
94 product(ccstr, ExtraSharedClassListFile, nullptr, \
95 "Extra classlist for building the CDS archive file") \
96 \
97 product(int, ArchiveRelocationMode, 1, DIAGNOSTIC, \
98 "(0) first map at preferred address, and if " \
99 "unsuccessful, map at alternative address; " \
100 "(1) always map at alternative address (default); " \
101 "(2) always map at preferred address, and if unsuccessful, " \
102 "do not map the archive") \
103 range(0, 2) \
104 \
105 /*========== New "AOT" flags =========================================*/ \
106 /* The following 3 flags are aliases of -Xshare:dump, */ \
107 /* -XX:SharedArchiveFile=..., etc. See CDSConfig::check_flag_aliases()*/ \
108 \
109 product(ccstr, AOTMode, nullptr, \
110 "Specifies how AOTCache should be created or used. Valid values " \
111 "are: off, record, create, auto, on; the default is auto") \
112 constraint(AOTModeConstraintFunc, AtParse) \
113 \
114 product(ccstr, AOTConfiguration, nullptr, \
115 "The configuration file written by -XX:AOTMode=record, and " \
116 "loaded by -XX:AOTMode=create. This file contains profiling data "\
117 "for deciding what contents should be added to AOTCache. ") \
118 constraint(AOTConfigurationConstraintFunc, AtParse) \
119 \
120 product(ccstr, AOTCache, nullptr, \
121 "Cache for improving start up and warm up") \
122 constraint(AOTCacheConstraintFunc, AtParse) \
123 \
124 product(ccstr, AOTCacheOutput, nullptr, \
125 "Specifies the file name for writing the AOT cache") \
126 constraint(AOTCacheOutputConstraintFunc, AtParse) \
127 \
128 product(bool, AOTInvokeDynamicLinking, false, DIAGNOSTIC, \
129 "AOT-link JVM_CONSTANT_InvokeDynamic entries in cached " \
130 "ConstantPools") \
131 \
132 product(bool, AOTClassLinking, false, \
133 "Load/link all archived classes for the boot/platform/app " \
134 "loaders before application main") \
135 \
136 product(bool, AOTCacheParallelRelocation, true, DIAGNOSTIC, \
137 "Use parallel relocation code to speed up startup.") \
138 \
139 /* flags to control training and deployment modes */ \
140 \
141 product(bool, AOTRecordTraining, false, DIAGNOSTIC, \
142 "Request output of training data for improved deployment.") \
143 \
144 product(bool, AOTReplayTraining, false, DIAGNOSTIC, \
145 "Read training data, if available, for use in this execution") \
146 \
147 product(bool, AOTPrintTrainingInfo, false, DIAGNOSTIC, \
148 "Print additional information about training") \
149 \
150 product(bool, AOTVerifyTrainingData, trueInDebug, DIAGNOSTIC, \
151 "Verify archived training data") \
152 \
153 product(bool, AOTCompileEagerly, true, DIAGNOSTIC, \
154 "Compile methods as soon as possible") \
155 \
156 product(bool, AOTRecordOptCompilationOrder, false, \
157 "Record c2/jvmci nmethod temperature to guide compilation order.")\
158 \
159 product(bool, AOTRecordOnlyTopCompilations, false, \
160 "Record only top compilations (non-zero counts)") \
161 \
162 product(int, AOTRecordOptCompilationOrderInterval, 10, \
163 "Sampling interval for RecordOptCompilationOrder") \
164 \
165 /* Recompilation flags */ \
166 \
167 product(int, AOTRecompilationLoadAverageThreshold, 5, \
168 "Queues load avergage after while recompilations are allowed") \
169 \
170 product(int, AOTRecompilationWorkUnitSize, 5, \
171 "Queues load avergage after while recompilations are allowed") \
172 \
173 product(bool, AOTRecompilation, false, \
174 "Recompile methods for peak performance") \
175 \
176 product(bool, AOTForceRecompilation, false, \
177 "Testing mode for recompilation") \
178 \
179 product(double, AOTDelayRecompilation, 0.0, \
180 "Delay recompilation for given number of seconds") \
181 \
182 /* AOT Code flags */ \
183 \
184 product(bool, AOTCodeCaching, false, DIAGNOSTIC, \
185 "Enable saving and restoring JIT comiled code in AOT cache") \
186 \
187 product(bool, AOTAdapterCaching, false, DIAGNOSTIC, \
188 "Enable saving and restoring i2c2i adapters in AOT cache") \
189 \
190 product(bool, AOTStubCaching, false, DIAGNOSTIC, \
191 "Enable saving and restoring stubs and code blobs in AOT cache") \
192 \
193 product(uint, AOTCodeMaxSize, 512*M, DIAGNOSTIC, \
194 "Buffer size in bytes for AOT code caching") \
195 range(1*M, max_jint) \
196 \
197 product(bool, AbortVMOnAOTCodeFailure, false, DIAGNOSTIC, \
198 "Abort VM on the first occurrence of AOT code load or store " \
199 "failure. By default VM will continue execute without AOT code.") \
200 \
201 develop(bool, TestAOTAdapterLinkFailure, false, \
202 "Test failure of adapter linking when loading from AOT cache.") \
203 \
204 product(bool, AOTCodeCPUFeatureCheck, true, DIAGNOSTIC, \
205 "Check CPU features during production run are compatible " \
206 "with the CPU features used during the assembly phase.") \
207 \
208 /*========== New options added by Leyden =============================*/ \
209 \
210 product(ccstrlist, AOTEndTrainingOnMethodEntry, "", \
211 "List of methods (pkg/class.name) to trigger end of AOT " \
212 "training run. Optional ',count=N' where N is > 0") \
213 \
214 product(ccstr, CacheOnlyClassesIn, nullptr, \
215 "If set, only classes loaded from these JAR files will be " \
216 "stored in the AOTCache") \
217 \
218 product(bool, ArchiveDynamicProxies, false, \
219 "Archive classes generated for java/lang/reflect/Proxy") \
220 \
221 product(bool, ArchiveLoaderLookupCache, false, \
222 "Archive app loader's positive and negative lookup cache") \
223 \
224 product(bool, ArchivePackages, false, \
225 "Archive the java.lang.ClassLoader::{packages,package2certs} " \
226 "tables") \
227 \
228 product(bool, ArchiveProtectionDomains, false, \
229 "Archive the java.security.SecureClassLoader::pdcache table") \
230 \
231 product(bool, ArchiveReflectionData, false, \
232 "Archive Class::reflectionData field") \
233 \
234 product(bool, SkipArchiveHeapVerification, false, \
235 "Skip verification of CDS archive heap") \
236
237 // end of CDS_FLAGS
238
239 DECLARE_FLAGS(CDS_FLAGS)
240
241 #endif // SHARE_CDS_CDS_GLOBALS_HPP