Intereting Posts
Связи сущностей в Android-комнате Неопределенная ссылка: DaoSession с использованием greendao и kotlin Объект «val» на уровне пакета Kotlin не работает из модуля библиотеки Android, если он оснащен JaCoCo Android WebView не загружает определенный URL-адрес автономный сценарист, чтобы получить intellij проект Свойство getter напечатано на Supertype вместо внедрения в Kotlin Предупреждение о компиляторе Android Studio Kotlin Метод anko toast () вызывает java.lang.NoSuchMethodError при вызове из фрагмента Не удалось найти метод springBoot () для аргументов – Spring Boot с использованием Kotlin Как инициализировать массив в Котлине? Оператор рефлексии Котлина получает реализацию Как переопределить метод setter в котлин? Как получить KProperty1 из KProperty0 Как реализовать репозиторий интерфейса в другом модуле проекта в AndroidStudio с помощью Dagger2 и Kotlin Каков правильный подход, когда функция Котлина не принимает тип NULL

Являются ли оптимизаторы Kotlin Float, Int и т. Д. Для встроенных типов в JVM?

Я новичок в Kotlin, и AFAICT его синтаксис поддерживает только объектные версии Int, Float и т. Д. Без соответствующих int и float-примитивов Java. Но оптимизирует ли компилятор или JVM использовать примитивные типы, если это возможно? Я обеспокоен тем, что если я использую локальные переменные в функции, вызванной из основного цикла игры, это может привести к заиканию GC, если JVM должен каждый раз создавать объект, а не использовать примитивный тип.

Цитирование документов :

Некоторые типы могут иметь специальное внутреннее представление – например, числа, символы и логические значения могут быть представлены как примитивные значения во время выполнения, но для пользователя они выглядят как обычные классы. В этом разделе мы описываем основные типы, используемые в Kotlin: числа, символы, булевы, массивы и строки.

Так что да, компилятор оптимизирует так, что примитивные типы JVM используются во время выполнения. Конечно, есть определенные исключения:

На платформе Java номера физически хранятся как примитивные типы JVM, если только нам не нужна ссылка с номером NULL (например, Int?) Или дженерики. В последнем случае номера в коробке.

В исходной документации есть также намек, например Int :

Представляет 32-разрядное целое число со знаком. В JVM значения, не связанные с нулевым значением этого типа, представлены как значения примитивного типа int.