【问题标题】:Kotlin: Massive amounts of ConsPStack, how can I avoid?Kotlin:大量的 ConsPStack,我该如何避免?
【发布时间】:2015-12-11 00:31:42
【问题描述】:

如何避免我的应用程序创建大量ConsPStack?这些是什么时候创建的?我的申请:https://github.com/Jire/Abendigo

【问题讨论】:

    标签: performance reflection collections kotlin garbage


    【解决方案1】:

    更新(2016 年 9 月 5 日):问题是 fixed,并将在 Kotlin 1.0.5 中提供。

    Kotlin 反射实现使用pcollections 缓存不同类的KClass 实例。大量的ConsPStack 实例可能意味着您在许多不同 类上使用反射。正如我在另一个答案中提到的,反射实现根本没有优化,所以目前有点预料到这样的问题。

    如果这个问题对您来说真的很重要,我建议尽可能使用 Java 反射来减少 KClass 的创建。此外,作为一个极端的解决方案,您可以尝试在特定时刻清除所描述缓存的内容。这是corresponding code in Kotlin project。由于缓存 (var K_CLASS_CACHE) 是私有的,因此您需要使用 Java 反射来访问它。

    【讨论】:

    • 我只使用反射来检索少数类上的KClassByteShortIntLongFloatDouble、@ 987654335@ 和 ByteBuffer)。我确实通过一个函数的具体泛型类型来引用这些,该函数也只传递这些类型。
    • 正如你所建议的,我可以通过将所有 KClass 替换为 Class 并使用反射通过 Example::class.java 获取 Java 类来删除所有这些:-)
    猜你喜欢
    • 2021-08-03
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2012-10-14
    相关资源
    最近更新 更多