plugins {
id 'java'
id 'org.springframework.boot' version '2.7.15'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
id "me.champeau.jmh" version "0.6.2"
}
group = 'javaStudy'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '11'
}
repositories {
mavenCentral()
}
processJmhResources {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
jmh{
fork = 1
warmupIterations =1
iterations = 1
}
tasks.named('test') {
useJUnitPlatform()
}
package javastudy;
import org.openjdk.jmh.annotations.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
@BenchmarkMode(Mode.AverageTime) // 벤치마크 대상 메서드를 실행하는 데 걸린 평균 시간 측정
@OutputTimeUnit(TimeUnit.MILLISECONDS) // 벤치마크 결과를 밀리초 단위로 출력
@Fork(value = 2,jvmArgs = {"-Xms4G","-Xmx4G"}) // 4Gb의 힙공간을 제공한 환경에서 두 번 벤치마크를 수행해 결과의 신뢰성 확보
public class Sample {
@State(Scope.Thread)
public static class MyState {
public long value = 2000000000;
@TearDown(Level.Invocation)
public void tearDown() {
System.gc();
}
}
@Benchmark
public long iterativeSum(MyState myState){
long result = 0;
for(long i = 1L; i<=myState.value; i++){
result+=i;
}
return result;
}
@Benchmark
public long sequentialSum(MyState myState){
return Stream.iterate(1L, i-> i+1)
.limit(myState.value)
.reduce(0L, Long::sum);
}
@Benchmark
public long parallelSum(MyState myState) {
return Stream.iterate(1L, i -> i + 1)
.limit(myState.value)
.parallel() // 스트림을 병렬 스트림으로 변환
.reduce(0L, Long::sum);
}
}
Mystate.value가 십만일때 결과
Benchmark Mode Cnt Score Error Units
Sample.iterativeSum avgt 0.085 ms/op
Sample.parallelSum avgt 6.385 ms/op
Sample.sequentialSum avgt 1.858 ms/op
Mystate.value가 1억일때 결과
Benchmark Mode Cnt Score Error Units
Sample.iterativeSum avgt 33.714 ms/op
Sample.parallelSum avgt 3042.733 ms/op
Sample.sequentialSum avgt 748.608 ms/op
Mystate.value가 20억일때 결과
Benchmark Mode Cnt Score Error Units
Sample.iterativeSum avgt 627.162 ms/op
Sample.sequentialSum avgt 21997.140 ms/op