< prev index next >
test/hotspot/jtreg/runtime/RedefineTests/RedefinePreviousVersions.java
Print this page
rev 50289 : [mq]: jep181-rev5
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, 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.
@@ -21,11 +21,11 @@
* questions.
*/
/*
* @test
- * @bug 8165246
+ * @bug 8165246 8010319
* @summary Test has_previous_versions flag and processing during class unloading.
* @library /test/lib
* @modules java.base/jdk.internal.misc
* @modules java.compiler
* java.instrument
@@ -35,42 +35,47 @@
*/
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
+// package access top-level classes to avoid problem with RedefineClassHelper
+// and nested types.
+
+class RedefinePreviousVersions_B { }
+
+class RedefinePreviousVersions_Running {
+ public static volatile boolean stop = false;
+ public static volatile boolean running = false;
+ static void localSleep() {
+ try {
+ Thread.sleep(10); // sleep for 10 ms
+ } catch(InterruptedException ie) {
+ }
+ }
+
+ public static void infinite() {
+ running = true;
+ while (!stop) { localSleep(); }
+ }
+}
+
+
+
public class RedefinePreviousVersions {
public static String newB =
- "class RedefinePreviousVersions$B {" +
+ "class RedefinePreviousVersions_B {" +
"}";
- static class B { }
-
public static String newRunning =
- "class RedefinePreviousVersions$Running {" +
+ "class RedefinePreviousVersions_Running {" +
" public static volatile boolean stop = true;" +
" public static volatile boolean running = true;" +
" static void localSleep() { }" +
" public static void infinite() { }" +
"}";
- static class Running {
- public static volatile boolean stop = false;
- public static volatile boolean running = false;
- static void localSleep() {
- try{
- Thread.sleep(10); // sleep for 10 ms
- } catch(InterruptedException ie) {
- }
- }
-
- public static void infinite() {
- running = true;
- while (!stop) { localSleep(); }
- }
- }
-
public static void main(String[] args) throws Exception {
if (args.length > 0) {
// java -javaagent:redefineagent.jar -Xlog:stuff RedefinePreviousVersions
@@ -85,39 +90,39 @@
}
// Redefine a class and create some garbage
// Since there are no methods running, the previous version is never added to the
// previous_version_list and the flag _has_previous_versions should stay false
- RedefineClassHelper.redefineClass(B.class, newB);
+ RedefineClassHelper.redefineClass(RedefinePreviousVersions_B.class, newB);
for (int i = 0; i < 10 ; i++) {
String s = new String("some garbage");
System.gc();
}
// Start a class that has a method running
new Thread() {
public void run() {
- Running.infinite();
+ RedefinePreviousVersions_Running.infinite();
}
}.start();
- while (!Running.running) {
+ while (!RedefinePreviousVersions_Running.running) {
Thread.sleep(10); // sleep for 10 ms
}
// Since a method of newRunning is running, this class should be added to the previous_version_list
// of Running, and _has_previous_versions should return true at class unloading.
- RedefineClassHelper.redefineClass(Running.class, newRunning);
+ RedefineClassHelper.redefineClass(RedefinePreviousVersions_Running.class, newRunning);
for (int i = 0; i < 10 ; i++) {
String s = new String("some garbage");
System.gc();
}
// purge should clean everything up, except Xcomp it might not.
- Running.stop = true;
+ RedefinePreviousVersions_Running.stop = true;
for (int i = 0; i < 10 ; i++) {
String s = new String("some garbage");
System.gc();
}
< prev index next >