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
복사