본문 바로가기
프로그래밍 놀이터/Kotlin, Coroutine

[Kotlin] Kotlin 은 Compile time 이 느리다는데.. 사실일까?

by 돼지왕 왕돼지 2017. 9. 26.
반응형

 [Kotlin] Kotlin 은 Compile time 이 느리다는데.. 사실일까?


https://medium.com/keepsafe-engineering/kotlin-vs-java-compilation-speed-e6c174b39b5d


1.0.2, Benchmark, build option, build setting, clean build, code change, code dependency, compile time, dependency, gradle daemon, gradle.properties, HardWare, incremental build, Java, JIT, jit compiler, jvm, jvm proces kill, jvm process, Kotlin, kotlin compile time, kotlin vs java, kotlin vs java compile time, kotlin.incremental, kotlin.incremental=true, normal build, Performance, recompile, test environment, verversion, [Kotlin] Kotlin 은 Compile time 이 느리다는데.. 사실일까?, 벤치마크, 벤치마킹, 빌드, 코드 변경, 코틀린 컴파일 시간, 테스트 조건, 테스트 환경


-

위 글을 쓴 필자는 Java base 로 되어 있는 출시된 앱을 전부 Kotlin 으로 전환하여 자신만의 Compile time 을 측정해보았다.



-

테스트 환경 및 조건 #1


빌드는 총 10번 연속으로 돌려서 평균값 산출

Hardware 는 i7-6000 3.4GHz, 32G DDR4, Samsung 850 Pro SSD, Gradle 2.14.1


빌드시마다 매번 clean build or not

Gradle daemon 사용 or not

코드 변경 유무




-

Clean build O & Gradle daemon X

( 차트는 위의 링크에 가면 볼 수 있습니당 )


Java 15.5 s

Kotlin 18.5 s


Kotlin 이 17% 정도 build time 이 더 걸림




-

Clean build O & Gradle daemon O


Gradle daemon 의 역할은 이러하다.

JVM 에서는 JIT compiler 를 사용한다. 그래서 실행횟수가 많을수록 performance 가 좋아진다.

그러나 JVM process 가 kill 되면 JIT compiler 로 얻어진 성능이득이 줄어든다.

그래서 코드를 Build 에서 올릴 때마다 JVM 은 초기화된다.

Grdle daemon 은 이 JIT 로 얻어진 performance 이득을 유지시켜준다.


이 환경에서 최초 build 에서는 오랜 시간이 걸렸다.

필자는 이를 warm-up time 이라고 부른다.

약 3회 이후에는 안정적 분포를 보인다.


1.0.2, Benchmark, build option, build setting, clean build, code change, code dependency, compile time, dependency, gradle daemon, gradle.properties, HardWare, incremental build, Java, JIT, jit compiler, jvm, jvm proces kill, jvm process, Kotlin, kotlin compile time, kotlin vs java, kotlin vs java compile time, kotlin.incremental, kotlin.incremental=true, normal build, Performance, recompile, test environment, verversion, [Kotlin] Kotlin 은 Compile time 이 느리다는데.. 사실일까?, 벤치마크, 벤치마킹, 빌드, 코드 변경, 코틀린 컴파일 시간, 테스트 조건, 테스트 환경


warm-up time을 포함해서


Java 14.1 s

Kotlin 16.5 s


Kotlin 이 13% 정도 build time 이 더 걸린다.


gradle daemon 이 build time 을 약 40% 정도 불였다.




-

Normal build (incl. Clean build) 는 처음부터 끝까지 다 재컴파일한다.

그러나 incremental build 를 사용하면 변경된 부분만 확인해서 compile 한다.


Kotlin 은 1.0.2 부터 incremental build 가 가능하다.

kotlin.incremental=truegradle.properties 에 써줘야 한다.




-

Incremental build & gradle daemon O


file change 없이 build 하면..

최초 warm-up time 을 빼고  Java 와 거의 차이가 없다.


dependency 가 없는 file change 주고 build 하면..

Kotlin 이 더 빠르다..

1.0.2, Benchmark, build option, build setting, clean build, code change, code dependency, compile time, dependency, gradle daemon, gradle.properties, HardWare, incremental build, Java, JIT, jit compiler, jvm, jvm proces kill, jvm process, Kotlin, kotlin compile time, kotlin vs java, kotlin vs java compile time, kotlin.incremental, kotlin.incremental=true, normal build, Performance, recompile, test environment, verversion, [Kotlin] Kotlin 은 Compile time 이 느리다는데.. 사실일까?, 벤치마크, 벤치마킹, 빌드, 코드 변경, 코틀린 컴파일 시간, 테스트 조건, 테스트 환경


dependency 가 많은 file 에 change 를 주고 build 하면..

역시나 Kotlin 이 더 빠르다. ( warm-up time 뺴고 )

1.0.2, Benchmark, build option, build setting, clean build, code change, code dependency, compile time, dependency, gradle daemon, gradle.properties, HardWare, incremental build, Java, JIT, jit compiler, jvm, jvm proces kill, jvm process, Kotlin, kotlin compile time, kotlin vs java, kotlin vs java compile time, kotlin.incremental, kotlin.incremental=true, normal build, Performance, recompile, test environment, verversion, [Kotlin] Kotlin 은 Compile time 이 느리다는데.. 사실일까?, 벤치마크, 벤치마킹, 빌드, 코드 변경, 코틀린 컴파일 시간, 테스트 조건, 테스트 환경

Java 7.1 s

Kotlin 6.0 s



-

결론적으로 우리는 좋은 option 들은 다 켤 것이고, 실제로는 코드를 변경하면서 build 를 한다.

그래서 Kotlin 빌드가 더 빠르다. ( 1.0.2 이상을 쓰면 )




반응형

댓글