< prev index next >
test/jdk/jdk/jfr/event/runtime/TestClassLoaderStatsEvent.java
Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com
rev 58568 : [mq]: hidden-class-4
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2020, 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. Oracle designates this
@@ -26,10 +26,11 @@
package jdk.jfr.event.runtime;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.List;
import jdk.jfr.Recording;
@@ -37,15 +38,20 @@
import jdk.jfr.consumer.RecordedEvent;
import jdk.test.lib.Asserts;
import jdk.test.lib.jfr.EventNames;
import jdk.test.lib.jfr.Events;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
+
/**
* @test
* @key jfr
* @requires vm.hasJFR
* @library /test/lib /test/jdk
+ * @modules java.base/jdk.internal.misc
+ * jdk.compiler
+ * jdk.jfr
* @build jdk.jfr.event.runtime.TestClasses
* @run main/othervm jdk.jfr.event.runtime.TestClassLoaderStatsEvent
*/
public class TestClassLoaderStatsEvent {
private final static String EVENT_NAME = EventNames.ClassLoaderStatistics;
@@ -71,16 +77,19 @@
}
RecordedClassLoader recordedClassLoader = event.getValue("classLoader");
if (CLASSLOADER_TYPE_NAME.equals(recordedClassLoader.getType().getName())) {
Asserts.assertEquals(CLASS_LOADER_NAME, recordedClassLoader.getName(),
"Expected class loader name " + CLASS_LOADER_NAME + ", got name " + recordedClassLoader.getName());
- Events.assertField(event, "classCount").equal(1L);
+ Events.assertField(event, "classCount").equal(2L);
Events.assertField(event, "chunkSize").above(1L);
Events.assertField(event, "blockSize").above(1L);
- Events.assertField(event, "unsafeAnonymousClassCount").equal(1L);
- Events.assertField(event, "unsafeAnonymousChunkSize").above(1L);
- Events.assertField(event, "unsafeAnonymousBlockSize").above(1L);
+ Events.assertField(event, "unsafeAnonymousClassCount").equal(2L);
+ Events.assertField(event, "unsafeAnonymousChunkSize").above(0L);
+ Events.assertField(event, "unsafeAnonymousBlockSize").above(0L);
+ Events.assertField(event, "hiddenClassCount").equal(2L);
+ Events.assertField(event, "hiddenChunkSize").above(0L);
+ Events.assertField(event, "hiddenBlockSize").above(0L);
isAnyFound = true;
}
}
Asserts.assertTrue(isAnyFound, "No events found");
}
@@ -89,10 +98,22 @@
dummyloader = new DummyClassLoader(name);
Class<?> c = Class.forName(TestClass.class.getName(), true, dummyloader);
if (c.getClassLoader() != dummyloader) {
throw new RuntimeException("TestClass defined by wrong classloader: " + c.getClassLoader());
}
+
+ // Compile a class for method createNonFindableClasses() to use to create both a
+ // weak hidden class and an anonymous class.
+ byte klassbuf[] = InMemoryJavaCompiler.compile("jdk.jfr.event.runtime.TestClass",
+ "package jdk.jfr.event.runtime; " +
+ "public class TestClass { " +
+ " public static void concat(String one, String two) throws Throwable { " +
+ " } } ");
+
+ Method m = c.getDeclaredMethod("createNonFindableClasses", byte[].class);
+ m.setAccessible(true);
+ m.invoke(null, klassbuf);
}
public static class DummyClassLoader extends ClassLoader {
static ByteBuffer readClassFile(String name) {
< prev index next >