在我的软件中,我使用属性委托来处理一些不同的值。
这是一个简单类似的示例,展示了我做的事情:
然而,我注意到每次引用此值似乎会创建一个自动装箱对象(
有没有避免开销的方法?如果没有直接的方法,是否有任何聪明的方式来“模拟”属性委托并具有高性能?
这是一个简单类似的示例,展示了我做的事情:
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
)。由于该值可能每秒被引用数百万次,这导致我的软件产生了大量垃圾,并对垃圾收集器造成了巨大压力。有没有避免开销的方法?如果没有直接的方法,是否有任何聪明的方式来“模拟”属性委托并具有高性能?
我在 YouTrack 上提交了一个错误报告:https://youtrack.jetbrains.com/issue/KT-13606
Integer.valueOf
方法的调用。 - Alexander Udalov