Skip to content

Commit 227610d

Browse files
committed
8267348: Rewrite gc/epsilon/TestClasses.java to use Metaspace with less classes
Reviewed-by: clanger Backport-of: 7b98400
1 parent d7a6e51 commit 227610d

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

test/hotspot/jtreg/gc/epsilon/TestClasses.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@
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

3636
import jdk.internal.org.objectweb.asm.ClassWriter;
@@ -43,14 +43,26 @@
4343

4444
public 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

Comments
 (0)