< prev index next >
test/javax/management/mxbean/LeakTest.java
Print this page
rev 11832 : 8078896: Add @modules as needed to the jdk_svc tests
Reviewed-by: alanb, mchung
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2006, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2015, 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.
@@ -23,10 +23,12 @@
/* @test
* @bug 6482247
* @summary Test that creating MXBeans does not introduce memory leaks.
* @author Eamonn McManus
+ * @modules java.desktop
+ * java.management
* @run build LeakTest RandomMXBeanTest
* @run main LeakTest
*/
/* In this test we create a ClassLoader, then use it to load and run another
@@ -36,16 +38,18 @@
* which implies a memory leak.
*
* This test can be applied to any jtreg test, not just the MXBean tests.
*/
+import java.io.File;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
+import java.nio.file.Paths;
public class LeakTest {
/* Ideally we would include MXBeanTest in the list of tests, since it
* has fairly complete coverage. However, the ClassLoader fails to be
* gc'd when we do that, and I am unable to figure out why. Examining
@@ -93,15 +97,19 @@
fail(originalTestClass.getName() + " kept ClassLoader reference");
}
private static WeakReference<ClassLoader>
testShadow(Class<?> originalTestClass) throws Exception {
- URLClassLoader originalLoader =
- (URLClassLoader) originalTestClass.getClassLoader();
- URL[] urls = originalLoader.getURLs();
+ String[] cpaths = System.getProperty("test.classes", ".")
+ .split(File.pathSeparator);
+ URL[] urls = new URL[cpaths.length];
+ for (int i=0; i < cpaths.length; i++) {
+ urls[i] = Paths.get(cpaths[i]).toUri().toURL();
+ }
+
URLClassLoader shadowLoader =
- new ShadowClassLoader(urls, originalLoader.getParent());
+ new ShadowClassLoader(urls, originalTestClass.getClassLoader().getParent());
System.out.println("Shadow loader is " + shadowLoader);
String className = originalTestClass.getName();
Class<?> testClass = Class.forName(className, false, shadowLoader);
if (testClass.getClassLoader() != shadowLoader) {
throw new IllegalArgumentException("Loader didn't work: " +
< prev index next >