Search

2025-01-11

JMH 성능 측정 코드 스페닛 변경
import de.siegmar.fastcsv.reader.CsvReader; import de.siegmar.fastcsv.reader.CsvRecord; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.profile.GCProfiler; 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 parserTest.CSVConfig; import parserTest.CSVParser; import parserTest.RecordParser; import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @State(Scope.Thread) public class CelperComparerJMH { private Path path; private String csvContent; @Setup(Level.Trial) public void setup() throws IOException { path = Path.of("src/main/resources/fast.csv"); csvContent = Files.readString(path); } @Benchmark public void fastCsvReader() throws IOException { try (Reader reader = new StringReader(csvContent)) { List<CsvRecord> collect = CsvReader.builder() .detectBomHeader(true) .ofCsvRecord(reader) .stream() .collect(Collectors.toList()); } } @Benchmark public void celperCsvReader() throws IOException { try (Reader reader = new StringReader(csvContent)) { Parser parser = new Parser(reader, 1024 * 8, "\n", ","); List<Record> collect = parser.parse(); } } @Benchmark public void celperCsvReader2() throws IOException { try (Reader reader = new StringReader(csvContent)) { CSVParser<List<parserTest.Record>> parser = new RecordParser(reader, new CSVConfig("\n", ",", '"', '#')); List<parserTest.Record> parse = parser.parse(); } } @Test @DisplayName("셀퍼 비교 테스트") void run() throws RunnerException, IOException { Options opt = new OptionsBuilder() .include(CelperComparerJMH.class.getSimpleName()) .warmupIterations(5) .measurementIterations(10) .timeUnit(TimeUnit.SECONDS) .threads(1) .forks(1) .mode(Mode.AverageTime) .mode(Mode.Throughput) .addProfiler(GCProfiler.class) .jvmArgs("-Xms2G", "-Xmx4G") .build(); new Runner(opt).run(); } }
Java
복사