view src/main/java/org/openjdk/gcbench/roots/Classes.java @ 87:f5ac05188aa1

Autogenerate class roots tests
author shade
date Wed, 22 Nov 2017 15:52:08 +0100
parents src/main/java/org/openjdk/gcbench/roots/Synchronizers.java@7b87f91c5db9
children 583fef4276f5
line wrap: on
line source

package org.openjdk.gcbench.roots;

import org.openjdk.jmh.annotations.*;

import java.util.List;
import java.util.concurrent.TimeUnit;

@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Fork(1)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@Threads(Threads.MAX)
@State(Scope.Benchmark)
public class Classes {

    @Param({"1", "10", "1000", "10000", "100000"})
    int classes;

    @Param({"1", "10", "100", "1000"})
    int classloaders;

    Class<?>[] arr;
    ClassGenerator.ByteClassLoader[] cls;

    @Setup
    public void setup() throws Exception {
        arr = new Class[classes];
        cls = new ClassGenerator.ByteClassLoader[classloaders];
        int classesPerCl = classes / classloaders;
        for (int c = 0; c < classloaders; c++) {
            cls[c] = new ClassGenerator.ByteClassLoader();
            for (int v = 0; v < classesPerCl; v++) {
                arr[c*classesPerCl + v] = ClassGenerator.generate(cls[c]);
            }
        }
    }

    @Benchmark
    public Object test() {
        return new Object();
    }

}