Я работаю над небольшим проектом с использованием SpringBoot для извлечения данных из Kafka и передачи их стороннему поставщику. Мой проект не зависит от других наших микросервисов.
Мне интересно, будет ли улучшение производительности при рефакторинге на Kotlin или это чисто для удобства чтения?
Я не думаю, что Kotlin действительно может сократить какие-либо расходы по времени выполнения, поскольку его ресурсы фиксированы. Итак, даже если stackoverflow может не соответствовать этому типу вопросов, читабельность - это ответ на ваш вопрос.
в любом случае все это компилируется в байт-код java, поэтому никаких улучшений производительности не должно быть.
Ну да, если у вас есть рекурсивный метод и вы используете ключевое слово tailrec, например




Компиляция Kotlin кажется медленнее: https://medium.com/keepsafe-engineering/kotlin-vs-java-compilation-speed-e6c174b39b5d
В остальном это байт-код в обоих местах. Единственная разница в том, что в Kotlin есть более быстрые реализации функций. (возможно нет).
Однако, если вы можете сделать более читаемый код (субъективно) в Kotlin, у вас будет больше шансов найти места для оптимизации.
TL; DR: не переносите язык из соображений производительности только на этом языке.
Но эта оценка сделана 2 года назад. И Gradle, и Kotlin внесли много улучшений, поэтому я был бы удивлен, если бы больше не было разницы. Я, конечно, не стал бы сбрасывать со счетов Kotlin, даже если он немного медленнее, поскольку компилятор делает больше, и я считаю, что язык чаще помогает подтолкнуть разработчиков в правильном направлении. На самом деле нравится статический анализ непосредственно как часть сборки с использованием Detekt, а не постфактум, как в Sonarqube.
Java ближе к способу работы JVM, чем Kotlin (методы не могут выглядеть как доступ к полям, вы можете лучше увидеть, где используются примитивы, по сравнению с классами и т. д.). Любые различия в производительности при попытке написать эквивалентный код (то есть без алгоритмических улучшений), скорее всего, будут обратными. Но они также могут быть тривиальными, особенно если рассматривать их как часть полного приложения.
Хм, так что используйте Kotlin, если я думаю, что еще один уровень абстракции будет полезен?
Я бы так не сказал. Используйте его для удобочитаемости и продуктивности. Что касается производительности, вы может по-прежнему делаете почти все, что делаете на Java, в Kotlin, вам просто нужно понять, как это работает.
Главное преимущество Kotlin - улучшенная выразительность и «время выхода на рынок»; не обязательно производительность во время выполнения. С этой точки зрения, ваш вопрос не подходит этому сообществу.