package jmh.benchmarks.date; import org.apache.commons.lang3.time.FastDateFormat; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.results.format.ResultFormatType; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.TimeUnit; /** * java date 压测 * * @author L.cm */ @BenchmarkMode(Mode.Throughput) @OutputTimeUnit(TimeUnit.SECONDS) @State(Scope.Thread) public class DateBenchmarkTest2 { public static final FastDateFormat FAST_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss"); @Benchmark public String newSimpleDateFormat() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); } @Benchmark public String threadLocal() { return local.get().format(new Date()); } @Benchmark public String fastDateFormat() { return FAST_DATE_FORMAT.format(new Date()); } private static final ThreadLocal<SimpleDateFormat> local = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); public static void main(String[] args) throws RunnerException { Options opts = new OptionsBuilder() .include(DateBenchmarkTest2.class.getSimpleName()) .warmupIterations(5) .measurementIterations(5) .jvmArgs("-server") .forks(1) .resultFormat(ResultFormatType.TEXT) .build(); new Runner(opts).run(); } }