< prev index next >

test/hotspot/jtreg/runtime/RedefineTests/RedefinePreviousVersions.java

Print this page
rev 50289 : [mq]: jep181-rev5

*** 1,7 **** /* ! * Copyright (c) 2016, 2017, 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. --- 1,7 ---- /* ! * 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,31 **** * questions. */ /* * @test ! * @bug 8165246 * @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 --- 21,31 ---- * questions. */ /* * @test ! * @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,76 **** */ import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; public class RedefinePreviousVersions { public static String newB = ! "class RedefinePreviousVersions$B {" + "}"; - static class B { } - public static String newRunning = ! "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 --- 35,81 ---- */ 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 {" + "}"; public static String newRunning = ! "class RedefinePreviousVersions_Running {" + " public static volatile boolean stop = true;" + " public static volatile boolean running = true;" + " static void localSleep() { }" + " public static void infinite() { }" + "}"; public static void main(String[] args) throws Exception { if (args.length > 0) { // java -javaagent:redefineagent.jar -Xlog:stuff RedefinePreviousVersions
*** 85,123 **** } // 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); 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(); } }.start(); ! while (!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); 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; for (int i = 0; i < 10 ; i++) { String s = new String("some garbage"); System.gc(); } --- 90,128 ---- } // 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(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() { ! RedefinePreviousVersions_Running.infinite(); } }.start(); ! 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(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. ! RedefinePreviousVersions_Running.stop = true; for (int i = 0; i < 10 ; i++) { String s = new String("some garbage"); System.gc(); }
< prev index next >