【问题标题】:Kotlin object creation and memory management compared to JavaKotlin 对象创建和内存管理与 Java 的比较
【发布时间】:2018-12-16 11:58:39
【问题描述】:

我听说在 Kotlin 中创建新对象很便宜。 Kotlin 创建对象的内存方面与 Java 有何不同?从data classclass 创建对象的成本是否存在差异?

【问题讨论】:

    标签: java memory-management kotlin


    【解决方案1】:

    我认为你的意思是 Kotlin 以 JVM 为目标,所以我将告诉你这个目标。

    Kotlin 使用与 Java 相同的字节码,因此总体性能是相同的(与 Java 相比,Kotlin 中的某些操作可以更少或更多优化(感谢编译器或 stdlib)。

    Data 类只是普通类,额外生成了 toString()、equals()、hashCode() 和 clone() 方法,因此它们具有与普通类相同的性能。

    【讨论】:

    • Kotlin 真的有另一种 JVM 吗?根据kotlinlang.org,可用的目标是JVM、Android(我猜是Dalvik VM)、JavaScript 和通过LLVM 的本机代码。此外,问题是关于内存成本,而不是代码性能。
    • 对不起,我的意思是 Kotlin 的 JVM 目标。与 Java 中的相同对象相比,对象使用相同数量的内存?
    • 问题是关于创建新对象的内存成本。在 Java 书籍中,例如Bruce Eckel 在 Java 中思考,创建新对象并不是一个高效的过程,因为 new 将对象放在堆上。这就是Java有原语的原因。 Kotlin 没有原语,在 Kotlin 演示文稿中,我听到 Kotlin 团队说“对象很便宜”。所以我想知道有什么区别
    • Kotlin 在其底层使用原语(对于 Int、Long、Char 等)。对于内存分配,它使用标准 JVM 指令,因此内存和时间性能与 Java 相同
    • @Angelina 我做了一个简单的基准测试,其中我使用了 Epsilon GC link 和基准测试执行以下操作:1)声明链表 2)添加 1_000、10_000 或 100_000 整数,然后打印所有这些(不让编译器通过删除未使用的代码来优化它)3)打印使用的内存我为 Kotlin 和 Java 做了相同的精确基准测试(使用 Java Integers 和 Kotlin Ints),两种语言的结果都是一样的
    【解决方案2】:

    如果 Java 和 Kotlin 都针对相同的目标 VM 编译,我希望没有区别 - 哪个源代码生成相同的字节码应该没有区别。

    至于data class,Hiosdra 正确地pointed out 认为这只是一个语法糖,告诉编译器派生一些对数据保存类有用的标准方法(请参阅the documentation)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2019-10-01
      相关资源
      最近更新 更多