私のソフトウェアでは、プロパティの委任を使用するさまざまな値があります。Kotlin:デリゲートされたプロパティでオートボックス(ゴミ)を避けるにはどうすればいいですか?
これは私が何をすべきかを示す簡単な同様の例である:私が気づいた何
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)
は、しかし、この値を参照すると、autoboxedオブジェクト(java.lang.Integer
)を作成するように見えるということですにEVERY参照。値は潜在的に毎秒何百回も何回も参照されなければならないので、私のソフトウェアのために大量のガーベジが作成されます。重いストレスがガベージコレクタに置かれます。
オーバーヘッドを避ける方法はありますか?直接ではない場合は、実行中のプロパティ代理を "エミュレート"する巧妙な方法がありますか? bug reportで説明したようにあなたの財産委譲が一般的であり、したがって値のボクシングを必要とするため、あなたのアプリがゴミを生成https://youtrack.jetbrains.com/issue/KT-13606
投稿したコードの例ではボクシングが発生しません。バイトコードに 'Integer.valueOf'への呼び出しがありません。 –
"Javaプラットフォームでは、ヌル値の参照(例:Int?)*やジェネリックが必要な場合を除いて、数値は物理的にJVMプリミティブ型として格納されます*。 - これがここの問題だと思います... – Lovis
あなたのバグ報告にもあなたが言われていることがわかりました – Lovis