mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-25 01:30:10 +00:00
8378298: Remove obsolete CDS string tests
Reviewed-by: matsaave, kvn
This commit is contained in:
parent
bc971b51b9
commit
103a08378d
@ -2215,25 +2215,10 @@ WB_ENTRY(jboolean, WB_CDSMemoryMappingFailed(JNIEnv* env, jobject wb))
|
||||
return FileMapInfo::memory_mapping_failed();
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jboolean, WB_IsSharedInternedString(JNIEnv* env, jobject wb, jobject str))
|
||||
if (!HeapShared::is_loading_mapping_mode()) {
|
||||
return false;
|
||||
}
|
||||
ResourceMark rm(THREAD);
|
||||
oop str_oop = JNIHandles::resolve(str);
|
||||
int length;
|
||||
jchar* chars = java_lang_String::as_unicode_string(str_oop, length, CHECK_(false));
|
||||
return StringTable::lookup_shared(chars, length) == str_oop;
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jboolean, WB_IsSharedClass(JNIEnv* env, jobject wb, jclass clazz))
|
||||
return (jboolean)AOTMetaspace::in_aot_cache(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jboolean, WB_AreSharedStringsMapped(JNIEnv* env))
|
||||
return AOTMappedHeapLoader::is_mapped();
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(void, WB_LinkClass(JNIEnv* env, jobject wb, jclass clazz))
|
||||
Klass *k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
|
||||
if (!k->is_instance_klass()) {
|
||||
@ -3058,9 +3043,7 @@ static JNINativeMethod methods[] = {
|
||||
{CC"getCDSGenericHeaderMinVersion", CC"()I", (void*)&WB_GetCDSGenericHeaderMinVersion},
|
||||
{CC"getCurrentCDSVersion", CC"()I", (void*)&WB_GetCDSCurrentVersion},
|
||||
{CC"isSharingEnabled", CC"()Z", (void*)&WB_IsSharingEnabled},
|
||||
{CC"isSharedInternedString", CC"(Ljava/lang/String;)Z", (void*)&WB_IsSharedInternedString },
|
||||
{CC"isSharedClass", CC"(Ljava/lang/Class;)Z", (void*)&WB_IsSharedClass },
|
||||
{CC"areSharedStringsMapped", CC"()Z", (void*)&WB_AreSharedStringsMapped },
|
||||
{CC"linkClass", CC"(Ljava/lang/Class;)V", (void*)&WB_LinkClass},
|
||||
{CC"areOpenArchiveHeapObjectsMapped", CC"()Z", (void*)&WB_AreOpenArchiveHeapObjectsMapped},
|
||||
{CC"isCDSIncluded", CC"()Z", (void*)&WB_IsCDSIncluded },
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2026, 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
|
||||
@ -24,70 +24,26 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8059510 8213445
|
||||
* @summary Test jcmd VM.symboltable, VM.stringtable and VM.systemdictionary options
|
||||
* @summary Test jcmd VM.symboltable and VM.stringtable
|
||||
* @library /test/lib
|
||||
* @build jdk.test.whitebox.WhiteBox
|
||||
* @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
|
||||
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
|
||||
* -XX:+WhiteBoxAPI DumpSymbolAndStringTable
|
||||
* @run main/othervm DumpSymbolAndStringTable
|
||||
*/
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.dcmd.PidJcmdExecutor;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.whitebox.WhiteBox;
|
||||
|
||||
public class DumpSymbolAndStringTable {
|
||||
public static void main(String[] args) throws Exception {
|
||||
WhiteBox wb = WhiteBox.getWhiteBox();
|
||||
boolean sharingEnabled = wb.isSharingEnabled();
|
||||
public static final String s = "MY_INTERNED_STRING";
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb = new ProcessBuilder();
|
||||
|
||||
pb.command(new PidJcmdExecutor().getCommandLine("VM.symboltable", "-verbose"));
|
||||
OutputAnalyzer output = CDSTestUtils.executeAndLog(pb, "jcmd-symboltable");
|
||||
final String sharedSymbolsHeader = "Shared symbols:\n";
|
||||
try {
|
||||
output.shouldContain("24 2: DumpSymbolAndStringTable\n");
|
||||
if (sharingEnabled) {
|
||||
output.shouldContain(sharedSymbolsHeader);
|
||||
output.shouldContain("17 65535: java.lang.runtime\n");
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
output.shouldContain("Unknown diagnostic command");
|
||||
}
|
||||
output.shouldContain("18 1: MY_INTERNED_STRING\n"); // This symbol should have been interned
|
||||
|
||||
pb.command(new PidJcmdExecutor().getCommandLine("VM.stringtable", "-verbose"));
|
||||
output = CDSTestUtils.executeAndLog(pb, "jcmd-stringtable");
|
||||
final String sharedStringsHeader = "Shared strings:\n";
|
||||
try {
|
||||
output.shouldContain("24: DumpSymbolAndStringTable\n");
|
||||
if (sharingEnabled && wb.canWriteJavaHeapArchive()) {
|
||||
output.shouldContain(sharedStringsHeader);
|
||||
if (!wb.isSharedInternedString("MILLI_OF_SECOND")) {
|
||||
throw new RuntimeException("'MILLI_OF_SECOND' should be a shared string");
|
||||
}
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
output.shouldContain("Unknown diagnostic command");
|
||||
}
|
||||
|
||||
pb.command(new PidJcmdExecutor().getCommandLine("VM.systemdictionary"));
|
||||
output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary");
|
||||
try {
|
||||
output.shouldContain("System Dictionary for 'app' class loader statistics:");
|
||||
output.shouldContain("Number of buckets");
|
||||
output.shouldContain("Number of entries");
|
||||
output.shouldContain("Maximum bucket size");
|
||||
} catch (RuntimeException e) {
|
||||
output.shouldContain("Unknown diagnostic command");
|
||||
}
|
||||
|
||||
pb.command(new PidJcmdExecutor().getCommandLine("VM.systemdictionary", "-verbose"));
|
||||
output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary");
|
||||
try {
|
||||
output.shouldContain("Dictionary for loader data: 0x");
|
||||
output.shouldContain("^java.lang.String");
|
||||
} catch (RuntimeException e) {
|
||||
output.shouldContain("Unknown diagnostic command");
|
||||
}
|
||||
output.shouldContain("18: MY_INTERNED_STRING\n"); // This string should have been interned
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,70 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2025, 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
|
||||
* @summary Check to make sure that shared strings in the bootstrap CDS archive
|
||||
* are actually shared
|
||||
* @requires vm.cds.write.mapped.java.heap
|
||||
* @requires vm.flagless
|
||||
* @library /test/lib
|
||||
* @build SharedStringsWb jdk.test.whitebox.WhiteBox
|
||||
* @run driver jdk.test.lib.helpers.ClassFileInstaller -jar whitebox.jar jdk.test.whitebox.WhiteBox
|
||||
* @run driver SharedStrings
|
||||
*/
|
||||
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.helpers.ClassFileInstaller;
|
||||
|
||||
public class SharedStrings {
|
||||
public static void main(String[] args) throws Exception {
|
||||
// Note: This is a basic sanity test for Shared Strings feature.
|
||||
// This also serves as a reference on how to use this feature,
|
||||
// hence the command lines are spelled out instead of using the
|
||||
// test utils methods.
|
||||
ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedStrings.jsa",
|
||||
"-Xlog:cds,aot+hashtables",
|
||||
// Needed for bootclasspath match, for CDS to work with WhiteBox API
|
||||
"-Xbootclasspath/a:" + ClassFileInstaller.getJarPath("whitebox.jar"),
|
||||
"-Xshare:dump");
|
||||
|
||||
OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "dump");
|
||||
CDSTestUtils.checkDump(out, "Shared string table stats");
|
||||
|
||||
|
||||
pb = ProcessTools.createLimitedTestJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedStrings.jsa",
|
||||
// needed for access to white box test API
|
||||
"-Xbootclasspath/a:" + ClassFileInstaller.getJarPath("whitebox.jar"),
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
|
||||
"-Xshare:on", "-showversion", "SharedStringsWb");
|
||||
|
||||
out = CDSTestUtils.executeAndLog(pb, "exec");
|
||||
CDSTestUtils.checkExec(out);
|
||||
}
|
||||
}
|
||||
@ -1,54 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2022, 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.
|
||||
*/
|
||||
|
||||
import jdk.test.whitebox.WhiteBox;
|
||||
|
||||
// This class is used by the test SharedStrings.java
|
||||
// It should be launched in CDS mode
|
||||
public class SharedStringsWb {
|
||||
public static void main(String[] args) throws Exception {
|
||||
WhiteBox wb = WhiteBox.getWhiteBox();
|
||||
|
||||
if (!wb.areSharedStringsMapped()) {
|
||||
System.out.println("Shared strings are not mapped, assuming PASS");
|
||||
return;
|
||||
}
|
||||
|
||||
// The string below is known to be added to CDS archive
|
||||
String s = "<init>";
|
||||
String internedS = s.intern();
|
||||
|
||||
// Check that it's a valid string
|
||||
if (s.getClass() != String.class || !(s instanceof String)) {
|
||||
throw new RuntimeException("Shared string is not a valid String: FAIL");
|
||||
}
|
||||
|
||||
if (wb.isSharedInternedString(internedS)) {
|
||||
System.out.println("Found shared string, result: PASS");
|
||||
} else {
|
||||
throw new RuntimeException("String is not shared, result: FAIL");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,89 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2018, 2023, 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.
|
||||
*
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URL;
|
||||
import jdk.test.whitebox.WhiteBox;
|
||||
|
||||
//
|
||||
// - Test static final String field with initial value in cached mirror should be also archived.
|
||||
// - GC should not crash when reference fields in cached mirror are updated at runtime
|
||||
// - Reference fields are updated to point to runtime created objects
|
||||
// - Reference fields are nullified
|
||||
//
|
||||
public class MirrorWithReferenceFieldsApp {
|
||||
|
||||
// Static String field with initial value
|
||||
static final String archived_field = "abc";
|
||||
|
||||
// Static object field
|
||||
static Object non_archived_field_1;
|
||||
|
||||
// Instance field
|
||||
Integer non_archived_field_2;
|
||||
|
||||
public MirrorWithReferenceFieldsApp() {
|
||||
non_archived_field_1 = new Object();
|
||||
non_archived_field_2 = Integer.valueOf(1);
|
||||
}
|
||||
|
||||
public static void main(String args[]) throws Exception {
|
||||
WhiteBox wb = WhiteBox.getWhiteBox();
|
||||
|
||||
if (!wb.areOpenArchiveHeapObjectsMapped()) {
|
||||
System.out.println("Archived open_archive_heap objects are not mapped.");
|
||||
System.out.println("This may happen during normal operation. Test Skipped.");
|
||||
return;
|
||||
}
|
||||
|
||||
MirrorWithReferenceFieldsApp m = new MirrorWithReferenceFieldsApp();
|
||||
m.test(wb);
|
||||
}
|
||||
|
||||
public void test(WhiteBox wb) {
|
||||
Class c = MirrorWithReferenceFieldsApp.class;
|
||||
if (wb.isSharedClass(c)) {
|
||||
if (wb.isSharedInternedString(archived_field)) {
|
||||
System.out.println("archived_field is archived as excepted");
|
||||
} else {
|
||||
throw new RuntimeException(
|
||||
"FAILED. archived_field is not archived.");
|
||||
}
|
||||
|
||||
// GC should not crash
|
||||
System.gc();
|
||||
System.gc();
|
||||
System.gc();
|
||||
|
||||
non_archived_field_1 = null;
|
||||
non_archived_field_2 = null;
|
||||
|
||||
System.gc();
|
||||
System.gc();
|
||||
System.gc();
|
||||
|
||||
System.out.println("Done.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,63 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2018, 2022, 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
|
||||
* @summary Test archived mirror with reference fields
|
||||
* @requires vm.cds.write.archived.java.heap
|
||||
* @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds
|
||||
* @build jdk.test.whitebox.WhiteBox
|
||||
* @compile MirrorWithReferenceFieldsApp.java
|
||||
* @run driver jdk.test.lib.helpers.ClassFileInstaller -jar app.jar MirrorWithReferenceFieldsApp
|
||||
* @run driver jdk.test.lib.helpers.ClassFileInstaller -jar WhiteBox.jar jdk.test.whitebox.WhiteBox
|
||||
* @run driver MirrorWithReferenceFieldsTest
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.helpers.ClassFileInstaller;
|
||||
import jdk.test.whitebox.WhiteBox;
|
||||
|
||||
public class MirrorWithReferenceFieldsTest {
|
||||
public static void main(String[] args) throws Exception {
|
||||
String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar");
|
||||
String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar;
|
||||
String appJar = ClassFileInstaller.getJarPath("app.jar");
|
||||
|
||||
String classlist[] = new String[] {
|
||||
"MirrorWithReferenceFieldsApp",
|
||||
};
|
||||
|
||||
TestCommon.testDump(appJar, classlist, use_whitebox_jar);
|
||||
OutputAnalyzer output = TestCommon.exec(appJar, use_whitebox_jar,
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:+WhiteBoxAPI",
|
||||
"-XX:+VerifyAfterGC",
|
||||
"MirrorWithReferenceFieldsApp");
|
||||
try {
|
||||
TestCommon.checkExec(output, "Done");
|
||||
} catch (Exception e) {
|
||||
output.shouldContain("Archived open_archive_heap objects are not mapped");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2026, 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
|
||||
@ -55,11 +55,6 @@ public class RedefineClassApp {
|
||||
static Instrumentation instrumentation;
|
||||
|
||||
public static void main(String args[]) throws Throwable {
|
||||
if (!wb.areSharedStringsMapped()) {
|
||||
System.out.println("Shared strings are ignored.");
|
||||
return;
|
||||
}
|
||||
|
||||
File bootJar = new File(args[0]);
|
||||
File appJar = new File(args[1]);
|
||||
|
||||
|
||||
@ -1,47 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2025, 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
|
||||
* @summary Exercise GC with shared strings
|
||||
* @requires vm.cds.write.mapped.java.heap
|
||||
* @library /test/hotspot/jtreg/runtime/cds/appcds /test/lib
|
||||
* @build HelloStringGC jdk.test.whitebox.WhiteBox
|
||||
* @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
|
||||
* @run driver ExerciseGC
|
||||
*/
|
||||
public class ExerciseGC {
|
||||
public static void main(String[] args) throws Exception {
|
||||
SharedStringsUtils.run(args, ExerciseGC::test);
|
||||
}
|
||||
public static void test(String[] args) throws Exception {
|
||||
SharedStringsUtils.buildJarAndWhiteBox("HelloStringGC");
|
||||
|
||||
SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("HelloStringGC"),
|
||||
"SharedStringsBasic.txt", "-Xlog:cds,aot+hashtables");
|
||||
|
||||
SharedStringsUtils.runWithArchiveAndWhiteBox("HelloStringGC",
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:+VerifyBeforeGC");
|
||||
}
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2022, 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.
|
||||
*
|
||||
*/
|
||||
|
||||
import jdk.test.whitebox.WhiteBox;
|
||||
|
||||
public class HelloStringGC {
|
||||
public static String[] array01 = new String[1000];
|
||||
public static String[] array02 = new String[1000];
|
||||
|
||||
public static void main(String args[]) throws RuntimeException {
|
||||
String testString1 = "shared_test_string_unique_14325";
|
||||
String testString2 = "test123";
|
||||
|
||||
WhiteBox wb = WhiteBox.getWhiteBox();
|
||||
if (wb.areSharedStringsMapped() && !wb.isSharedInternedString(testString1)) {
|
||||
throw new RuntimeException("testString1 is not shared");
|
||||
}
|
||||
|
||||
for (int i=0; i<5; i++) {
|
||||
allocSomeStrings(testString1, testString2);
|
||||
array01 = null;
|
||||
array02 = null;
|
||||
System.gc();
|
||||
sleep(300);
|
||||
array01 = new String[1000];
|
||||
array02 = new String[1000];
|
||||
}
|
||||
|
||||
wb.fullGC();
|
||||
|
||||
System.out.println("HelloStringGC: PASS");
|
||||
}
|
||||
|
||||
private static void allocSomeStrings(String s1, String s2) {
|
||||
for (int i = 0; i < 1000; i ++) {
|
||||
array01[i] = new String(s1);
|
||||
array02[i] = new String(s2);
|
||||
}
|
||||
}
|
||||
|
||||
private static void sleep(int ms) {
|
||||
try {
|
||||
Thread.sleep(ms);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,76 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2022, 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.
|
||||
*
|
||||
*/
|
||||
|
||||
// A test class to be launched in AppCDS mode, has basic+
|
||||
// coverage of string operations
|
||||
|
||||
import jdk.test.whitebox.WhiteBox;
|
||||
|
||||
public class HelloStringPlus {
|
||||
public static void main(String args[]) {
|
||||
// Let's reference the string that is in archive
|
||||
String testString1 = "shared_test_string_unique_14325";
|
||||
System.out.println("Hello String: " + testString1);
|
||||
|
||||
WhiteBox wb = WhiteBox.getWhiteBox();
|
||||
if (wb.areSharedStringsMapped() && !wb.isSharedInternedString(testString1)) {
|
||||
throw new RuntimeException("testString1 is not shared");
|
||||
}
|
||||
|
||||
// Check other basic string operations
|
||||
// Interning and equality
|
||||
String[] testArray = new String[] {"shared_", "test_", "string_", "intern_", "12345"};
|
||||
String toBeInterned = "";
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (String s : testArray) {
|
||||
sb.append(s);
|
||||
}
|
||||
toBeInterned = sb.toString();
|
||||
|
||||
System.out.println("About to intern a string: " + toBeInterned);
|
||||
toBeInterned.intern();
|
||||
|
||||
// check equality
|
||||
if (testString1.equals(toBeInterned))
|
||||
throw new RuntimeException("Equality test 1 failed");
|
||||
|
||||
if (!testString1.equals("shared_test_string" + '_' + "unique_14325"))
|
||||
throw new RuntimeException("Equality test 2 failed");
|
||||
|
||||
// Chech the hash code functionality; no special assertions, just make sure
|
||||
// no crashe or exception occurs
|
||||
System.out.println("testString1.hashCode() = " + testString1.hashCode());
|
||||
|
||||
// Check intern() method for "" string
|
||||
String empty = "";
|
||||
String empty_interned = empty.intern();
|
||||
if (wb.areSharedStringsMapped() && !wb.isSharedInternedString(empty)) {
|
||||
throw new RuntimeException("Empty string should be shared");
|
||||
}
|
||||
if (empty_interned != empty) {
|
||||
throw new RuntimeException("Different string is returned from intern() for empty string");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,59 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2025, 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
|
||||
* @summary Test shared strings together with string intern operation
|
||||
* @requires vm.gc == null
|
||||
* @requires vm.cds.write.mapped.java.heap
|
||||
* @library /test/hotspot/jtreg/runtime/cds/appcds /test/lib
|
||||
* @compile InternStringTest.java
|
||||
* @build jdk.test.whitebox.WhiteBox
|
||||
* @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
|
||||
* @run driver InternSharedString
|
||||
*/
|
||||
|
||||
// This test requires the vm.cds.write.mapped.java.heap specifically as it has expectations
|
||||
// about using the mechanism for dumping the entire string table, which the streaming solution
|
||||
// does not do.
|
||||
|
||||
public class InternSharedString {
|
||||
public static void main(String[] args) throws Exception {
|
||||
SharedStringsUtils.run(args, InternSharedString::test);
|
||||
}
|
||||
|
||||
public static void test(String[] args) throws Exception {
|
||||
SharedStringsUtils.buildJarAndWhiteBox("InternStringTest");
|
||||
|
||||
SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("InternStringTest"),
|
||||
"ExtraSharedInput.txt", "-Xlog:cds,aot+hashtables");
|
||||
|
||||
String[] extraMatches = new String[] {
|
||||
InternStringTest.passed_output1,
|
||||
InternStringTest.passed_output2,
|
||||
InternStringTest.passed_output3 };
|
||||
|
||||
SharedStringsUtils.runWithArchiveAndWhiteBox(extraMatches, "InternStringTest");
|
||||
}
|
||||
}
|
||||
@ -1,85 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2022, 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.
|
||||
*
|
||||
*/
|
||||
|
||||
import jdk.test.whitebox.WhiteBox;
|
||||
|
||||
public class InternStringTest {
|
||||
public static String passed_output1 = "Found shared string.";
|
||||
public static String passed_output2 = "Shared strings are equal.";
|
||||
public static String passed_output3 = "Found shared string containing latin1 supplement chars.";
|
||||
public static String passed_output4 = "Found shared string containing non-western chars.";
|
||||
public static final String latin1Sup = "XXXX \u00a3 YYYY"; // \u00a3 = The pound sign
|
||||
public static final String nonWestern = "XXXX \u5678 YYYY"; // \u5678 = Unicode Han Character 'ton (metric or English)'
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
WhiteBox wb = WhiteBox.getWhiteBox();
|
||||
|
||||
// All string literals are shared.
|
||||
String shared1 = "LiveOak";
|
||||
String interned1 = shared1.intern();
|
||||
if (wb.areSharedStringsMapped()) {
|
||||
if (wb.isSharedInternedString(interned1)) {
|
||||
System.out.println(passed_output1);
|
||||
} else {
|
||||
throw new RuntimeException("Failed: String is not shared.");
|
||||
}
|
||||
}
|
||||
|
||||
// Test 2: shared_string1.intern() == shared_string2.intern()
|
||||
String shared2 = "LiveOak";
|
||||
String interned2 = shared2.intern();
|
||||
if (interned1 == interned2) {
|
||||
System.out.println(passed_output2);
|
||||
} else {
|
||||
throw new RuntimeException("Not equal!");
|
||||
}
|
||||
|
||||
// Test 3: interned strings with a char in latin1 supplement block [\u0080-\u00ff]
|
||||
{
|
||||
String a = "X" + latin1Sup.substring(1);
|
||||
String b = a.intern();
|
||||
|
||||
if (wb.areSharedStringsMapped()) {
|
||||
if (wb.isSharedInternedString(b)) {
|
||||
System.out.println(passed_output3);
|
||||
} else {
|
||||
throw new RuntimeException("Failed: expected shared string with latin1-supplement chars.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Test 5: interned strings with non-western characters
|
||||
{
|
||||
String a = "X" + nonWestern.substring(1);
|
||||
String b = a.intern();
|
||||
if (wb.areSharedStringsMapped()) {
|
||||
if (wb.isSharedInternedString(b)) {
|
||||
System.out.println(passed_output4);
|
||||
} else {
|
||||
throw new RuntimeException("Failed: expected shared string with non-western chars.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2025, 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
|
||||
* @summary Basic plus test for shared strings
|
||||
* @requires vm.cds.write.mapped.java.heap
|
||||
* @library /test/hotspot/jtreg/runtime/cds/appcds /test/lib
|
||||
* @build HelloStringPlus jdk.test.whitebox.WhiteBox
|
||||
* @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
|
||||
* @run driver SharedStringsBasicPlus
|
||||
*/
|
||||
|
||||
// This test requires the vm.cds.write.mapped.java.heap specifically as it has expectations
|
||||
// about using the mechanism for dumping the entire string table, which the streaming solution
|
||||
// does not do.
|
||||
|
||||
public class SharedStringsBasicPlus {
|
||||
public static void main(String[] args) throws Exception {
|
||||
SharedStringsUtils.run(args, SharedStringsBasicPlus::test);
|
||||
}
|
||||
|
||||
public static void test(String[] args) throws Exception {
|
||||
SharedStringsUtils.buildJarAndWhiteBox("HelloStringPlus");
|
||||
|
||||
SharedStringsUtils.dumpWithWhiteBox( TestCommon.list("HelloStringPlus"),
|
||||
"SharedStringsBasic.txt", "-Xlog:cds,aot+hashtables");
|
||||
|
||||
SharedStringsUtils.runWithArchiveAndWhiteBox("HelloStringPlus");
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2026, 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
|
||||
@ -47,7 +47,7 @@ public class SharedStringsUtils {
|
||||
// SharedStringsUtils.run() is for running the main test body multiple times, each with a different
|
||||
// set of extra VM options that are passed to the child processes.
|
||||
//
|
||||
// See ./ExerciseGC.java for an example.
|
||||
// See ./LargePages.java for an example.
|
||||
public static void run(String args[], Test t) throws Exception {
|
||||
int numSetOfChildVMOptions = vmOptionCombos.length;
|
||||
for (int i=0; i< numSetOfChildVMOptions; i++) {
|
||||
|
||||
@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2022, 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.
|
||||
*
|
||||
*/
|
||||
|
||||
import jdk.test.whitebox.WhiteBox;
|
||||
|
||||
public class SharedStringsWb {
|
||||
public static void main(String[] args) throws Exception {
|
||||
WhiteBox wb = WhiteBox.getWhiteBox();
|
||||
String s = "shared_test_string_unique_14325";
|
||||
s = s.intern();
|
||||
if (wb.areSharedStringsMapped()) {
|
||||
if (wb.isSharedInternedString(s)) {
|
||||
System.out.println("Found shared string.");
|
||||
} else {
|
||||
throw new RuntimeException("String is not shared.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 2025, 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
|
||||
* @summary White box test for shared strings
|
||||
* @requires vm.cds.write.mapped.java.heap
|
||||
* @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds
|
||||
* @build jdk.test.whitebox.WhiteBox SharedStringsWb
|
||||
* @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
|
||||
* @run driver SharedStringsWbTest
|
||||
*/
|
||||
|
||||
// This test requires the vm.cds.write.mapped.java.heap specifically as it has expectations
|
||||
// about using the mechanism for dumping the entire string table, which the streaming solution
|
||||
// does not do.
|
||||
|
||||
import java.io.*;
|
||||
import jdk.test.whitebox.WhiteBox;
|
||||
|
||||
public class SharedStringsWbTest {
|
||||
public static void main(String[] args) throws Exception {
|
||||
SharedStringsUtils.run(args, SharedStringsWbTest::test);
|
||||
}
|
||||
|
||||
public static void test(String[] args) throws Exception {
|
||||
SharedStringsUtils.buildJarAndWhiteBox("SharedStringsWb");
|
||||
|
||||
SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("SharedStringsWb"),
|
||||
"SharedStringsBasic.txt", "-Xlog:cds,aot+hashtables");
|
||||
|
||||
SharedStringsUtils.runWithArchiveAndWhiteBox("SharedStringsWb");
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2026, 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
|
||||
@ -799,8 +799,6 @@ public class WhiteBox {
|
||||
public native boolean cdsMemoryMappingFailed();
|
||||
public native boolean isSharingEnabled();
|
||||
public native boolean isSharedClass(Class<?> c);
|
||||
public native boolean areSharedStringsMapped();
|
||||
public native boolean isSharedInternedString(String s);
|
||||
public native boolean isCDSIncluded();
|
||||
public native boolean isJFRIncluded();
|
||||
public native boolean isDTraceIncluded();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user