Kotlin:我如何避免委托属性中的自动装箱(垃圾)?

时间:2016-08-25 18:20:26

标签: properties delegates kotlin autoboxing garbage

在我的软件中,我有一些使用属性委派的各种值。

这是一个简单的类似示例,展示了我的工作:

class ExampleDelegate<T>(val value: T) {

    operator fun getValue(thisRef: Any?, property: KProperty<*>) = value

}

val example by ExampleDelegate(1000) // number larger than 127 (no box cache)

然而,我注意到,引用此值似乎会在每个引用上创建一个自动装帧的对象(java.lang.Integer)。因为该值必须以每秒数百万次或每秒的速度引用,这会导致我的软件产生大量垃圾;垃圾收集器上施加了很大的压力。

有没有办法避免开销?如果不是直接的,是否有任何聪明的方法来模仿&#34;属性代表团是否具有表现力?

enter image description here

提交了有关YouTrack的错误报告:https://youtrack.jetbrains.com/issue/KT-13606

1 个答案:

答案 0 :(得分:4)

正如bug report中所讨论的,您的应用会生成垃圾,因为您的属性委托是通用的,因此需要装箱值。如果您使用具有基本类型的非泛型属性委托,则不会发生装箱。