annotate src/share/vm/runtime/vm_version.cpp @ 94:0834225a7916

6634032: CMS: Need CMSInitiatingPermOccupancyFraction for perm, divorcing from CMSInitiatingOccupancyFraction Summary: The option CMSInitiatingPermOccupancyFraction now controls perm triggering threshold. Even though the actual value of the threshold has not yet been changed, so there is no change in policy, we now have the infrastructure in place for dynamically deciding when to collect the perm gen, an issue that will be addressed in the near future. Reviewed-by: jmasa
author ysr
date Sun, 16 Mar 2008 21:57:25 -0700
parents 28372612af5e
children d1605aabd0a1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
a61af66fc99e Initial load
duke
parents:
diff changeset
2 * Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved.
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
a61af66fc99e Initial load
duke
parents:
diff changeset
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
a61af66fc99e Initial load
duke
parents:
diff changeset
20 * CA 95054 USA or visit www.sun.com if you need additional information or
a61af66fc99e Initial load
duke
parents:
diff changeset
21 * have any questions.
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
a61af66fc99e Initial load
duke
parents:
diff changeset
25 # include "incls/_precompiled.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
26 # include "incls/_vm_version.cpp.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
27
a61af66fc99e Initial load
duke
parents:
diff changeset
28 const char* Abstract_VM_Version::_s_vm_release = Abstract_VM_Version::vm_release();
a61af66fc99e Initial load
duke
parents:
diff changeset
29 const char* Abstract_VM_Version::_s_internal_vm_info_string = Abstract_VM_Version::internal_vm_info_string();
a61af66fc99e Initial load
duke
parents:
diff changeset
30 bool Abstract_VM_Version::_supports_cx8 = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
31 unsigned int Abstract_VM_Version::_logical_processors_per_package = 1U;
a61af66fc99e Initial load
duke
parents:
diff changeset
32
a61af66fc99e Initial load
duke
parents:
diff changeset
33 #ifndef HOTSPOT_RELEASE_VERSION
a61af66fc99e Initial load
duke
parents:
diff changeset
34 #error HOTSPOT_RELEASE_VERSION must be defined
a61af66fc99e Initial load
duke
parents:
diff changeset
35 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
36 #ifndef JRE_RELEASE_VERSION
a61af66fc99e Initial load
duke
parents:
diff changeset
37 #error JRE_RELEASE_VERSION must be defined
a61af66fc99e Initial load
duke
parents:
diff changeset
38 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
39 #ifndef HOTSPOT_BUILD_TARGET
a61af66fc99e Initial load
duke
parents:
diff changeset
40 #error HOTSPOT_BUILD_TARGET must be defined
a61af66fc99e Initial load
duke
parents:
diff changeset
41 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
42
a61af66fc99e Initial load
duke
parents:
diff changeset
43 #ifdef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
44 #define VM_RELEASE HOTSPOT_RELEASE_VERSION
a61af66fc99e Initial load
duke
parents:
diff changeset
45 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
46 #define VM_RELEASE HOTSPOT_RELEASE_VERSION "-" HOTSPOT_BUILD_TARGET
a61af66fc99e Initial load
duke
parents:
diff changeset
47 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
48
a61af66fc99e Initial load
duke
parents:
diff changeset
49 // HOTSPOT_RELEASE_VERSION must follow the release version naming convention
a61af66fc99e Initial load
duke
parents:
diff changeset
50 // <major_ver>.<minor_ver>-b<nn>[-<identifier>][-<debug_target>]
a61af66fc99e Initial load
duke
parents:
diff changeset
51 int Abstract_VM_Version::_vm_major_version = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
52 int Abstract_VM_Version::_vm_minor_version = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
53 int Abstract_VM_Version::_vm_build_number = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
54 bool Abstract_VM_Version::_initialized = false;
10
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
55 int Abstract_VM_Version::_parallel_worker_threads = 0;
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
56 bool Abstract_VM_Version::_parallel_worker_threads_initialized = false;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
57
a61af66fc99e Initial load
duke
parents:
diff changeset
58 void Abstract_VM_Version::initialize() {
a61af66fc99e Initial load
duke
parents:
diff changeset
59 if (_initialized) {
a61af66fc99e Initial load
duke
parents:
diff changeset
60 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
61 }
a61af66fc99e Initial load
duke
parents:
diff changeset
62 char* vm_version = os::strdup(HOTSPOT_RELEASE_VERSION);
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 // Expecting the next vm_version format:
a61af66fc99e Initial load
duke
parents:
diff changeset
65 // <major_ver>.<minor_ver>-b<nn>[-<identifier>]
a61af66fc99e Initial load
duke
parents:
diff changeset
66 char* vm_major_ver = vm_version;
a61af66fc99e Initial load
duke
parents:
diff changeset
67 assert(isdigit(vm_major_ver[0]),"wrong vm major version number");
a61af66fc99e Initial load
duke
parents:
diff changeset
68 char* vm_minor_ver = strchr(vm_major_ver, '.');
a61af66fc99e Initial load
duke
parents:
diff changeset
69 assert(vm_minor_ver != NULL && isdigit(vm_minor_ver[1]),"wrong vm minor version number");
a61af66fc99e Initial load
duke
parents:
diff changeset
70 vm_minor_ver[0] = '\0'; // terminate vm_major_ver
a61af66fc99e Initial load
duke
parents:
diff changeset
71 vm_minor_ver += 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
72 char* vm_build_num = strchr(vm_minor_ver, '-');
a61af66fc99e Initial load
duke
parents:
diff changeset
73 assert(vm_build_num != NULL && vm_build_num[1] == 'b' && isdigit(vm_build_num[2]),"wrong vm build number");
a61af66fc99e Initial load
duke
parents:
diff changeset
74 vm_build_num[0] = '\0'; // terminate vm_minor_ver
a61af66fc99e Initial load
duke
parents:
diff changeset
75 vm_build_num += 2;
a61af66fc99e Initial load
duke
parents:
diff changeset
76
a61af66fc99e Initial load
duke
parents:
diff changeset
77 _vm_major_version = atoi(vm_major_ver);
a61af66fc99e Initial load
duke
parents:
diff changeset
78 _vm_minor_version = atoi(vm_minor_ver);
a61af66fc99e Initial load
duke
parents:
diff changeset
79 _vm_build_number = atoi(vm_build_num);
a61af66fc99e Initial load
duke
parents:
diff changeset
80
a61af66fc99e Initial load
duke
parents:
diff changeset
81 os::free(vm_version);
a61af66fc99e Initial load
duke
parents:
diff changeset
82 _initialized = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
83 }
a61af66fc99e Initial load
duke
parents:
diff changeset
84
a61af66fc99e Initial load
duke
parents:
diff changeset
85 #if defined(_LP64)
a61af66fc99e Initial load
duke
parents:
diff changeset
86 #define VMLP "64-Bit "
a61af66fc99e Initial load
duke
parents:
diff changeset
87 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
88 #define VMLP ""
a61af66fc99e Initial load
duke
parents:
diff changeset
89 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
90
a61af66fc99e Initial load
duke
parents:
diff changeset
91 #ifdef KERNEL
a61af66fc99e Initial load
duke
parents:
diff changeset
92 #define VMTYPE "Kernel"
a61af66fc99e Initial load
duke
parents:
diff changeset
93 #else // KERNEL
a61af66fc99e Initial load
duke
parents:
diff changeset
94 #ifdef TIERED
a61af66fc99e Initial load
duke
parents:
diff changeset
95 #define VMTYPE "Server"
a61af66fc99e Initial load
duke
parents:
diff changeset
96 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
97 #define VMTYPE COMPILER1_PRESENT("Client") \
a61af66fc99e Initial load
duke
parents:
diff changeset
98 COMPILER2_PRESENT("Server")
a61af66fc99e Initial load
duke
parents:
diff changeset
99 #endif // TIERED
a61af66fc99e Initial load
duke
parents:
diff changeset
100 #endif // KERNEL
a61af66fc99e Initial load
duke
parents:
diff changeset
101
a61af66fc99e Initial load
duke
parents:
diff changeset
102 #ifndef HOTSPOT_VM_DISTRO
a61af66fc99e Initial load
duke
parents:
diff changeset
103 #error HOTSPOT_VM_DISTRO must be defined
a61af66fc99e Initial load
duke
parents:
diff changeset
104 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
105 #define VMNAME HOTSPOT_VM_DISTRO " " VMLP VMTYPE " VM"
a61af66fc99e Initial load
duke
parents:
diff changeset
106
a61af66fc99e Initial load
duke
parents:
diff changeset
107 const char* Abstract_VM_Version::vm_name() {
a61af66fc99e Initial load
duke
parents:
diff changeset
108 return VMNAME;
a61af66fc99e Initial load
duke
parents:
diff changeset
109 }
a61af66fc99e Initial load
duke
parents:
diff changeset
110
a61af66fc99e Initial load
duke
parents:
diff changeset
111
a61af66fc99e Initial load
duke
parents:
diff changeset
112 const char* Abstract_VM_Version::vm_vendor() {
a61af66fc99e Initial load
duke
parents:
diff changeset
113 #ifdef VENDOR
a61af66fc99e Initial load
duke
parents:
diff changeset
114 return XSTR(VENDOR);
a61af66fc99e Initial load
duke
parents:
diff changeset
115 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
116 return "Sun Microsystems Inc.";
a61af66fc99e Initial load
duke
parents:
diff changeset
117 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
118 }
a61af66fc99e Initial load
duke
parents:
diff changeset
119
a61af66fc99e Initial load
duke
parents:
diff changeset
120
a61af66fc99e Initial load
duke
parents:
diff changeset
121 const char* Abstract_VM_Version::vm_info_string() {
a61af66fc99e Initial load
duke
parents:
diff changeset
122 switch (Arguments::mode()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
123 case Arguments::_int:
a61af66fc99e Initial load
duke
parents:
diff changeset
124 return UseSharedSpaces ? "interpreted mode, sharing" : "interpreted mode";
a61af66fc99e Initial load
duke
parents:
diff changeset
125 case Arguments::_mixed:
a61af66fc99e Initial load
duke
parents:
diff changeset
126 return UseSharedSpaces ? "mixed mode, sharing" : "mixed mode";
a61af66fc99e Initial load
duke
parents:
diff changeset
127 case Arguments::_comp:
a61af66fc99e Initial load
duke
parents:
diff changeset
128 return UseSharedSpaces ? "compiled mode, sharing" : "compiled mode";
a61af66fc99e Initial load
duke
parents:
diff changeset
129 };
a61af66fc99e Initial load
duke
parents:
diff changeset
130 ShouldNotReachHere();
a61af66fc99e Initial load
duke
parents:
diff changeset
131 return "";
a61af66fc99e Initial load
duke
parents:
diff changeset
132 }
a61af66fc99e Initial load
duke
parents:
diff changeset
133
a61af66fc99e Initial load
duke
parents:
diff changeset
134 // NOTE: do *not* use stringStream. this function is called by
a61af66fc99e Initial load
duke
parents:
diff changeset
135 // fatal error handler. if the crash is in native thread,
a61af66fc99e Initial load
duke
parents:
diff changeset
136 // stringStream cannot get resource allocated and will SEGV.
a61af66fc99e Initial load
duke
parents:
diff changeset
137 const char* Abstract_VM_Version::vm_release() {
a61af66fc99e Initial load
duke
parents:
diff changeset
138 return VM_RELEASE;
a61af66fc99e Initial load
duke
parents:
diff changeset
139 }
a61af66fc99e Initial load
duke
parents:
diff changeset
140
a61af66fc99e Initial load
duke
parents:
diff changeset
141 #define OS LINUX_ONLY("linux") \
a61af66fc99e Initial load
duke
parents:
diff changeset
142 WINDOWS_ONLY("windows") \
a61af66fc99e Initial load
duke
parents:
diff changeset
143 SOLARIS_ONLY("solaris")
a61af66fc99e Initial load
duke
parents:
diff changeset
144
a61af66fc99e Initial load
duke
parents:
diff changeset
145 #define CPU IA32_ONLY("x86") \
a61af66fc99e Initial load
duke
parents:
diff changeset
146 IA64_ONLY("ia64") \
a61af66fc99e Initial load
duke
parents:
diff changeset
147 AMD64_ONLY("amd64") \
a61af66fc99e Initial load
duke
parents:
diff changeset
148 SPARC_ONLY("sparc")
a61af66fc99e Initial load
duke
parents:
diff changeset
149
a61af66fc99e Initial load
duke
parents:
diff changeset
150 const char *Abstract_VM_Version::vm_platform_string() {
a61af66fc99e Initial load
duke
parents:
diff changeset
151 return OS "-" CPU;
a61af66fc99e Initial load
duke
parents:
diff changeset
152 }
a61af66fc99e Initial load
duke
parents:
diff changeset
153
a61af66fc99e Initial load
duke
parents:
diff changeset
154 const char* Abstract_VM_Version::internal_vm_info_string() {
a61af66fc99e Initial load
duke
parents:
diff changeset
155 #ifndef HOTSPOT_BUILD_USER
a61af66fc99e Initial load
duke
parents:
diff changeset
156 #define HOTSPOT_BUILD_USER unknown
a61af66fc99e Initial load
duke
parents:
diff changeset
157 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
158
a61af66fc99e Initial load
duke
parents:
diff changeset
159 #ifndef HOTSPOT_BUILD_COMPILER
a61af66fc99e Initial load
duke
parents:
diff changeset
160 #ifdef _MSC_VER
a61af66fc99e Initial load
duke
parents:
diff changeset
161 #if _MSC_VER == 1100
a61af66fc99e Initial load
duke
parents:
diff changeset
162 #define HOTSPOT_BUILD_COMPILER "MS VC++ 5.0"
a61af66fc99e Initial load
duke
parents:
diff changeset
163 #elif _MSC_VER == 1200
a61af66fc99e Initial load
duke
parents:
diff changeset
164 #define HOTSPOT_BUILD_COMPILER "MS VC++ 6.0"
a61af66fc99e Initial load
duke
parents:
diff changeset
165 #elif _MSC_VER == 1310
a61af66fc99e Initial load
duke
parents:
diff changeset
166 #define HOTSPOT_BUILD_COMPILER "MS VC++ 7.1"
a61af66fc99e Initial load
duke
parents:
diff changeset
167 #elif _MSC_VER == 1400
a61af66fc99e Initial load
duke
parents:
diff changeset
168 #define HOTSPOT_BUILD_COMPILER "MS VC++ 8.0"
a61af66fc99e Initial load
duke
parents:
diff changeset
169 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
170 #define HOTSPOT_BUILD_COMPILER "unknown MS VC++:" XSTR(_MSC_VER)
a61af66fc99e Initial load
duke
parents:
diff changeset
171 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
172 #elif defined(__SUNPRO_CC)
a61af66fc99e Initial load
duke
parents:
diff changeset
173 #if __SUNPRO_CC == 0x420
a61af66fc99e Initial load
duke
parents:
diff changeset
174 #define HOTSPOT_BUILD_COMPILER "Workshop 4.2"
a61af66fc99e Initial load
duke
parents:
diff changeset
175 #elif __SUNPRO_CC == 0x500
a61af66fc99e Initial load
duke
parents:
diff changeset
176 #define HOTSPOT_BUILD_COMPILER "Workshop 5.0 compat=" XSTR(__SUNPRO_CC_COMPAT)
a61af66fc99e Initial load
duke
parents:
diff changeset
177 #elif __SUNPRO_CC == 0x520
a61af66fc99e Initial load
duke
parents:
diff changeset
178 #define HOTSPOT_BUILD_COMPILER "Workshop 5.2 compat=" XSTR(__SUNPRO_CC_COMPAT)
a61af66fc99e Initial load
duke
parents:
diff changeset
179 #elif __SUNPRO_CC == 0x580
a61af66fc99e Initial load
duke
parents:
diff changeset
180 #define HOTSPOT_BUILD_COMPILER "Workshop 5.8"
a61af66fc99e Initial load
duke
parents:
diff changeset
181 #elif __SUNPRO_CC == 0x590
a61af66fc99e Initial load
duke
parents:
diff changeset
182 #define HOTSPOT_BUILD_COMPILER "Workshop 5.9"
a61af66fc99e Initial load
duke
parents:
diff changeset
183 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
184 #define HOTSPOT_BUILD_COMPILER "unknown Workshop:" XSTR(__SUNPRO_CC)
a61af66fc99e Initial load
duke
parents:
diff changeset
185 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
186 #elif defined(__GNUC__)
a61af66fc99e Initial load
duke
parents:
diff changeset
187 #define HOTSPOT_BUILD_COMPILER "gcc " __VERSION__
a61af66fc99e Initial load
duke
parents:
diff changeset
188 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
189 #define HOTSPOT_BUILD_COMPILER "unknown compiler"
a61af66fc99e Initial load
duke
parents:
diff changeset
190 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
191 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
192
a61af66fc99e Initial load
duke
parents:
diff changeset
193
a61af66fc99e Initial load
duke
parents:
diff changeset
194 return VMNAME " (" VM_RELEASE ") for " OS "-" CPU
a61af66fc99e Initial load
duke
parents:
diff changeset
195 " JRE (" JRE_RELEASE_VERSION "), built on " __DATE__ " " __TIME__
a61af66fc99e Initial load
duke
parents:
diff changeset
196 " by " XSTR(HOTSPOT_BUILD_USER) " with " HOTSPOT_BUILD_COMPILER;
a61af66fc99e Initial load
duke
parents:
diff changeset
197 }
a61af66fc99e Initial load
duke
parents:
diff changeset
198
a61af66fc99e Initial load
duke
parents:
diff changeset
199 unsigned int Abstract_VM_Version::jvm_version() {
a61af66fc99e Initial load
duke
parents:
diff changeset
200 return ((Abstract_VM_Version::vm_major_version() & 0xFF) << 24) |
a61af66fc99e Initial load
duke
parents:
diff changeset
201 ((Abstract_VM_Version::vm_minor_version() & 0xFF) << 16) |
a61af66fc99e Initial load
duke
parents:
diff changeset
202 (Abstract_VM_Version::vm_build_number() & 0xFF);
a61af66fc99e Initial load
duke
parents:
diff changeset
203 }
a61af66fc99e Initial load
duke
parents:
diff changeset
204
a61af66fc99e Initial load
duke
parents:
diff changeset
205
a61af66fc99e Initial load
duke
parents:
diff changeset
206 void VM_Version_init() {
a61af66fc99e Initial load
duke
parents:
diff changeset
207 VM_Version::initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
208
a61af66fc99e Initial load
duke
parents:
diff changeset
209 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
210 if (PrintMiscellaneous && Verbose) {
a61af66fc99e Initial load
duke
parents:
diff changeset
211 os::print_cpu_info(tty);
a61af66fc99e Initial load
duke
parents:
diff changeset
212 }
a61af66fc99e Initial load
duke
parents:
diff changeset
213 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
214 }
10
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
215
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
216 unsigned int Abstract_VM_Version::nof_parallel_worker_threads(
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
217 unsigned int num,
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
218 unsigned int den,
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
219 unsigned int switch_pt) {
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
220 if (FLAG_IS_DEFAULT(ParallelGCThreads)) {
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
221 assert(ParallelGCThreads == 0, "Default ParallelGCThreads is not 0");
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
222 // For very large machines, there are diminishing returns
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
223 // for large numbers of worker threads. Instead of
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
224 // hogging the whole system, use a fraction of the workers for every
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
225 // processor after the first 8. For example, on a 72 cpu machine
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
226 // and a chosen fraction of 5/8
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
227 // use 8 + (72 - 8) * (5/8) == 48 worker threads.
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
228 unsigned int ncpus = (unsigned int) os::active_processor_count();
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
229 return (ncpus <= switch_pt) ?
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
230 ncpus :
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
231 (switch_pt + ((ncpus - switch_pt) * num) / den);
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
232 } else {
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
233 return ParallelGCThreads;
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
234 }
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
235 }
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
236
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
237 unsigned int Abstract_VM_Version::calc_parallel_worker_threads() {
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
238 return nof_parallel_worker_threads(5, 8, 8);
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
239 }
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
240
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
241
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
242 // Does not set the _initialized flag since it is
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
243 // a global flag.
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
244 unsigned int Abstract_VM_Version::parallel_worker_threads() {
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
245 if (!_parallel_worker_threads_initialized) {
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
246 if (FLAG_IS_DEFAULT(ParallelGCThreads)) {
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
247 _parallel_worker_threads = VM_Version::calc_parallel_worker_threads();
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
248 } else {
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
249 _parallel_worker_threads = ParallelGCThreads;
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
250 }
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
251 _parallel_worker_threads_initialized = true;
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
252 }
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
253 return _parallel_worker_threads;
28372612af5e 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 0
diff changeset
254 }