LeakTest.java revision 469
/*
* Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/* @test
* @bug 6482247
* @summary Test that creating MXBeans does not introduce memory leaks.
* @author Eamonn McManus
* @run build LeakTest RandomMXBeanTest
* @run main LeakTest
*/
/* In this test we create a ClassLoader, then use it to load and run another
* jtreg test. When the other test has completed, we wait for the ClassLoader
* to be garbage-collected. If it has not been gc'd after a reasonable
* amount of time, then something is keeping a reference to the ClassLoader,
* which implies a memory leak.
*
* This test can be applied to any jtreg test, not just the MXBean tests.
*/
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
* a heap dump shows only weak references to the ClassLoader. I suspect
* something is wrong in the internals of the reflection classes, used
* quite heavily by MXBeanTest.
*/
// private static Class<?>[] otherTests = {MXBeanTest.class};
// This class just makes it easier for us to spot our loader in heap dumps
private static class ShadowClassLoader extends URLClassLoader {
}
}
"by caches in the MXBean infrastructure");
}
}
}
}
private static WeakReference<ClassLoader>
throw new IllegalArgumentException("Loader didn't work: " +
}
}
}
}