mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8014138: Add VM option to facilitate the writing of CDS tests
Added the -XX:SharedArchiveFile option. Reviewed-by: coleenp, ccheung, acorn, dcubed, zgu
This commit is contained in:
parent
b3675a00d9
commit
3aa20631a9
3 changed files with 89 additions and 15 deletions
|
@ -3182,25 +3182,37 @@ static void force_serial_gc() {
|
||||||
}
|
}
|
||||||
#endif // INCLUDE_ALL_GCS
|
#endif // INCLUDE_ALL_GCS
|
||||||
|
|
||||||
|
// Sharing support
|
||||||
|
// Construct the path to the archive
|
||||||
|
static char* get_shared_archive_path() {
|
||||||
|
char *shared_archive_path;
|
||||||
|
if (SharedArchiveFile == NULL) {
|
||||||
|
char jvm_path[JVM_MAXPATHLEN];
|
||||||
|
os::jvm_path(jvm_path, sizeof(jvm_path));
|
||||||
|
char *end = strrchr(jvm_path, *os::file_separator());
|
||||||
|
if (end != NULL) *end = '\0';
|
||||||
|
size_t jvm_path_len = strlen(jvm_path);
|
||||||
|
size_t file_sep_len = strlen(os::file_separator());
|
||||||
|
shared_archive_path = NEW_C_HEAP_ARRAY(char, jvm_path_len +
|
||||||
|
file_sep_len + 20, mtInternal);
|
||||||
|
if (shared_archive_path != NULL) {
|
||||||
|
strncpy(shared_archive_path, jvm_path, jvm_path_len + 1);
|
||||||
|
strncat(shared_archive_path, os::file_separator(), file_sep_len);
|
||||||
|
strncat(shared_archive_path, "classes.jsa", 11);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(SharedArchiveFile) + 1, mtInternal);
|
||||||
|
if (shared_archive_path != NULL) {
|
||||||
|
strncpy(shared_archive_path, SharedArchiveFile, strlen(SharedArchiveFile) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return shared_archive_path;
|
||||||
|
}
|
||||||
|
|
||||||
// Parse entry point called from JNI_CreateJavaVM
|
// Parse entry point called from JNI_CreateJavaVM
|
||||||
|
|
||||||
jint Arguments::parse(const JavaVMInitArgs* args) {
|
jint Arguments::parse(const JavaVMInitArgs* args) {
|
||||||
|
|
||||||
// Sharing support
|
|
||||||
// Construct the path to the archive
|
|
||||||
char jvm_path[JVM_MAXPATHLEN];
|
|
||||||
os::jvm_path(jvm_path, sizeof(jvm_path));
|
|
||||||
char *end = strrchr(jvm_path, *os::file_separator());
|
|
||||||
if (end != NULL) *end = '\0';
|
|
||||||
char *shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(jvm_path) +
|
|
||||||
strlen(os::file_separator()) + 20, mtInternal);
|
|
||||||
if (shared_archive_path == NULL) return JNI_ENOMEM;
|
|
||||||
strcpy(shared_archive_path, jvm_path);
|
|
||||||
strcat(shared_archive_path, os::file_separator());
|
|
||||||
strcat(shared_archive_path, "classes");
|
|
||||||
strcat(shared_archive_path, ".jsa");
|
|
||||||
SharedArchivePath = shared_archive_path;
|
|
||||||
|
|
||||||
// Remaining part of option string
|
// Remaining part of option string
|
||||||
const char* tail;
|
const char* tail;
|
||||||
|
|
||||||
|
@ -3291,6 +3303,12 @@ jint Arguments::parse(const JavaVMInitArgs* args) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call get_shared_archive_path() here, after possible SharedArchiveFile option got parsed.
|
||||||
|
SharedArchivePath = get_shared_archive_path();
|
||||||
|
if (SharedArchivePath == NULL) {
|
||||||
|
return JNI_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
// Delay warning until here so that we've had a chance to process
|
// Delay warning until here so that we've had a chance to process
|
||||||
// the -XX:-PrintWarnings flag
|
// the -XX:-PrintWarnings flag
|
||||||
if (needs_hotspotrc_warning) {
|
if (needs_hotspotrc_warning) {
|
||||||
|
|
|
@ -3677,6 +3677,9 @@ class CommandLineFlags {
|
||||||
product(bool , AllowNonVirtualCalls, false, \
|
product(bool , AllowNonVirtualCalls, false, \
|
||||||
"Obey the ACC_SUPER flag and allow invokenonvirtual calls") \
|
"Obey the ACC_SUPER flag and allow invokenonvirtual calls") \
|
||||||
\
|
\
|
||||||
|
diagnostic(ccstr, SharedArchiveFile, NULL, \
|
||||||
|
"Override the default location of the CDS archive file") \
|
||||||
|
\
|
||||||
experimental(uintx, ArrayAllocatorMallocLimit, \
|
experimental(uintx, ArrayAllocatorMallocLimit, \
|
||||||
SOLARIS_ONLY(64*K) NOT_SOLARIS(max_uintx), \
|
SOLARIS_ONLY(64*K) NOT_SOLARIS(max_uintx), \
|
||||||
"Allocation less than this value will be allocated " \
|
"Allocation less than this value will be allocated " \
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 8014138
|
||||||
|
* @summary Testing new -XX:SharedArchiveFile=<file-name> option
|
||||||
|
* @library /testlibrary
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.oracle.java.testlibrary.*;
|
||||||
|
|
||||||
|
public class SharedArchiveFile {
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||||
|
"-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./sample.jsa", "-Xshare:dump");
|
||||||
|
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||||
|
try {
|
||||||
|
output.shouldContain("Loading classes to share");
|
||||||
|
output.shouldHaveExitValue(0);
|
||||||
|
|
||||||
|
pb = ProcessTools.createJavaProcessBuilder(
|
||||||
|
"-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./sample.jsa", "-Xshare:on", "-version");
|
||||||
|
output = new OutputAnalyzer(pb.start());
|
||||||
|
output.shouldContain("sharing");
|
||||||
|
output.shouldHaveExitValue(0);
|
||||||
|
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
output.shouldContain("Unable to use shared archive");
|
||||||
|
output.shouldHaveExitValue(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue