Kotlin 的 Float、Int 等是否针对 JVM 中的内置类型进行了优化? [复制]

2024-01-08

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


引用docs https://kotlinlang.org/docs/reference/basic-types.html:

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

所以是的,编译器确实以这样的方式进行优化:JVM 原始类型 https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html在运行时使用。当然也有一些例外:

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin 的 Float、Int 等是否针对 JVM 中的内置类型进行了优化? [复制] 的相关文章

  • Kotlin 合约不适用于扩展函数中的空检查

    我正在尝试编写一个返回的扩展函数true如果该值不是null或 0 并使用合约向编译器保证如果我返回true 该值非空 但是 它似乎不适用于智能投射 当我尝试将值传递给采用不可空值的函数时 它仍然无法编译Long 我尝试编译这段代码 但它不
  • 对于所有 JVM GC 实现来说,压缩真的是不可避免的吗?

    On this link http www azulsystems com technology c4 garbage collector据说 这些暂停是不可避免的压缩要求的结果 堆以释放空间 收藏家使用不同的策略 推迟这些事件 但是压缩是
  • Perl 中如何释放内存?

    我的代码如下所示 my var my var new while 1 while my k v each var a sub v var A map var var new keys var new var new B sub a sub
  • Kotlin - 从地图列表到按键分组的地图

    我有一个List
  • 没有 WindowManager.LayoutParams.TYPE_PHONE 的粘性覆盖

    我所说的粘性是指一个不会通过调用启动器意图而关闭的窗口 intent addCategory Intent CATEGORY HOME 以前这是用完成的WindowManager LayoutParams TYPE PHONE 但此类型现已
  • 仅允许使用 -Xjvm-default 选项从具有“@JvmDefault”成员的接口继承

    我在Android studio上更新了kotlin版本 ext kotlin version 1 6 10 不幸的是我收到构建错误 仅允许使用 Xjvm default 选项从具有 JvmDefault 成员的接口继承 我怎样才能解决这个
  • 包装一个类,其方法返回该类的实例

    我需要编写一个类来包装第三方包中的类 通常 第三方类具有返回第三方类实例的方法 这些方法的包装版本必须将这些实例转换为包装类的实例 但我无法使其工作 我正在使用 Python 2 7 和新式类 基于创建一个包装类来围绕现有函数调用前置和后置
  • 垃圾收集最佳实践

    如果您要从显示列表中删除某个 MovieClip 并且该 MovieClip 又具有具有自己的事件侦听器的子 MovieClip 则是否有必要从子 MovieClip 中删除所有侦听器 或者只是直接从显示列表中删除的父级 MovieClip
  • PS幸存者空间几乎已满

    我看到我的应用程序的 PS 幸存者空间在大部分时间几乎已满 98 我不知道PS幸存者空间是什么 这是正常的吗 遇到这种情况应该怎么办 首先 参见例如这里 什么是幸存者空间 https stackoverflow com q 10695298
  • Ninject 垃圾收集 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我在一个由
  • 修改列表时,Jetpack composecollectAsState() 未收集热流

    当我使用collectAsState the collect 仅当传递新列表时触发 而不是在修改和发出列表时触发 查看模型 HiltViewModel class MyViewModel Inject constructor ViewMod
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • 如何在 jetpack compose 中预览对话框?

    我有这个代码 Composable fun SomeDialog Dialog onDismissRequest properties DialogProperties Preview showBackground true Composa
  • 如何确定 kotlin-multiplatform 项目中的构建类型

    我正在开发一个多平台项目 包括 iOS 和 JVM 我不直接针对 Android 根据构建类型 调试或发布 我想配置日志记录级别 即仅打印发布中的错误 由于没有一个BuildConfig课程可用 我怎样才能知道commonMain构建类型
  • Kotlin Room 数据库单例模式

    我正在尝试创建单人房间数据库 我找到了两种解决方案 但我不知道它们之间有什么区别 根据这个文件 companion object Volatile private var INSTANCE AppDatabase null fun getI
  • 如何使用 KClass 反射在 Kotlin 中区分类和接口

    我正在使用 Kotlins KClass 按名称查找类 如下所示 val i KClass lt gt Class forName SampleClass kotlin 但是 我想省略接口 到目前为止 我通过构造函数区分接口和类 val i
  • 是否可以使用“git gc”来打包引用日志对象?

    正如答案所暗示的https stackoverflow com a 32025729 https stackoverflow com a 32025729我已经配置了远程裸仓库 git config gc pruneExpire never
  • 插件“Android Bundle Support”不兼容

    大家好 自从上次更新以来 当我启动 android studio 时 我遇到了一个非常奇怪的错误 我有这个错误 插件错误 插件 Android Bundle Support 不兼容 直到构建 AI 195 SNAPSHOT 我在网上找不到任

随机推荐