Kotlin的Float,Int等是否针对JVM中的内置类型进行了优化?

时间:2017-11-02 16:56:03

标签: garbage-collection kotlin wrapper primitive-types

我是Kotlin的新手,而AFAICT的语法只支持Int,Float等的对象版本,而没有Java的相应int和float原语。但是,如果可能,编译器或JVM是否优化使用基元类型?我担心如果我在游戏主循环中调用的函数中使用局部变量,如果JVM每次都必须创建一个对象而不是使用基本类型,那么它可能会导致GC断断续续。

1 个答案:

答案 0 :(得分:2)

引用docs

  

某些类型可以有一个特殊的内部表示 - 例如,数字,字符和布尔值可以在运行时表示为原始值 - 但对于用户来说,它们看起来像普通的类。在本节中,我们将介绍Kotlin中使用的基本类型:数字,字符,布尔值,数组和字符串。

所以是的,编译器确实以在运行时使用JVM primitive types的方式进行优化。当然有一些例外:

  

在Java平台上,数字被物理存储为JVM基元类型,除非我们需要可空的数字引用(例如Int?)或涉及泛型。在后一种情况下,数字是装箱的。

源文档中还有一个提示,例如: Int

  

表示32位有符号整数。在JVM上,此类型的非可空值表示为基本类型int的值。