【发布时间】:2015-12-11 00:31:42
【问题描述】:
如何避免我的应用程序创建大量ConsPStack?这些是什么时候创建的?我的申请:https://github.com/Jire/Abendigo
【问题讨论】:
标签: performance reflection collections kotlin garbage
如何避免我的应用程序创建大量ConsPStack?这些是什么时候创建的?我的申请:https://github.com/Jire/Abendigo
【问题讨论】:
标签: performance reflection collections kotlin garbage
更新(2016 年 9 月 5 日):问题是 fixed,并将在 Kotlin 1.0.5 中提供。
Kotlin 反射实现使用pcollections 缓存不同类的KClass 实例。大量的ConsPStack 实例可能意味着您在许多不同 类上使用反射。正如我在另一个答案中提到的,反射实现根本没有优化,所以目前有点预料到这样的问题。
如果这个问题对您来说真的很重要,我建议尽可能使用 Java 反射来减少 KClass 的创建。此外,作为一个极端的解决方案,您可以尝试在特定时刻清除所描述缓存的内容。这是corresponding code in Kotlin project。由于缓存 (var K_CLASS_CACHE) 是私有的,因此您需要使用 Java 反射来访问它。
【讨论】:
KClass(Byte、Short、Int、Long、Float、Double、@ 987654335@ 和 ByteBuffer)。我确实通过一个函数的具体泛型类型来引用这些,该函数也只传递这些类型。
KClass 替换为 Class 并使用反射通过 Example::class.java 获取 Java 类来删除所有这些:-)