2525 * @test TestClasses
2626 * @key gc
2727 * @requires vm.gc.Epsilon & !vm.graal.enabled
28- * @summary Epsilon is able to allocate a lot of classes
28+ * @summary Epsilon is able to allocate a lot of classes, resizing Metaspace
2929 *
3030 * @modules java.base/jdk.internal.org.objectweb.asm
3131 * java.base/jdk.internal.misc
3232 *
33- * @run main/othervm -Xmx128m -XX:MetaspaceSize=1m -XX:MaxMetaspaceSize=64m -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -Xlog:gc+metaspace TestClasses
33+ * @run main/othervm -Xmx1g -XX:MetaspaceSize=1m -XX:MaxMetaspaceSize=64m -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -Xlog:gc+metaspace TestClasses
3434 */
3535
3636import jdk .internal .org .objectweb .asm .ClassWriter ;
4343
4444public class TestClasses {
4545
46- static final int COUNT = 32 *1024 ;
46+ static final int CLASSES = 1024 ;
47+ static final int FIELDS = 1024 ;
4748
4849 static volatile Object sink ;
4950
5051 static class MyClassLoader extends ClassLoader {
52+ static final String [] FIELD_NAMES ;
53+ static {
54+ FIELD_NAMES = new String [FIELDS ];
55+ for (int c = 0 ; c < FIELDS ; c ++) {
56+ FIELD_NAMES [c ] = "f" + c ;
57+ }
58+ }
59+
5160 public byte [] createClass (String name ) {
5261 ClassWriter cw = new ClassWriter (ClassWriter .COMPUTE_MAXS | ClassWriter .COMPUTE_FRAMES );
5362 cw .visit (Opcodes .V1_8 , Opcodes .ACC_PUBLIC | Opcodes .ACC_SUPER , name , null , "java/lang/Object" , null );
63+ for (String fName : FIELD_NAMES ) {
64+ cw .visitField (Opcodes .ACC_STATIC | Opcodes .ACC_PRIVATE , fName , "J" , null , null );
65+ }
5466 return cw .toByteArray ();
5567 }
5668
@@ -65,7 +77,7 @@ public Class<?> loadClass(String name) throws ClassNotFoundException {
6577
6678 public static void main (String [] args ) throws Exception {
6779 ClassLoader cl = new MyClassLoader ();
68- for (int c = 0 ; c < COUNT ; c ++) {
80+ for (int c = 0 ; c < CLASSES ; c ++) {
6981 Class <?> clazz = Class .forName ("Dummy" + c , true , cl );
7082 if (clazz .getClassLoader () != cl ) {
7183 throw new IllegalStateException ("Should have loaded by target loader" );
0 commit comments