Kotlin:避免创建FqNameUnsafe和FqName

我注意到我的应用程序创建了大量的FqNameUnsafeFqName实例。 什么时候创建? 我怎样才能避免这些创造? (我需要减少我的应用程序中的垃圾创建。)

在这里输入图像描述

我的Kotlin项目中没有FqNameUnsafe或FqName。 它只包含在kotlin-reflect( 一个单独的JAR文件 )中。

如果您不需要在应用程序中使用kotlin-reflect,则不要将其包含在类路径中。 一般来说,Kotlin编译成非常简单的JVM字节码,不会创造太多开销(如果有的话),有时甚至会执行纯Java,因为它可以内联函数 (可以在Kotlin语言文档中搜索“开销”细节)。

但是,如果你确实需要使用kotlin-reflection,那么据我所知,没有办法可以调整它是如何做的,而且会产生典型的反射成本 (加上Kotlin反射所特有的任何东西能够找到任何有用的文件)。

更新(2016-09-13):这个问题已经修复 ,并不会从Kotlin 1.1开始重现。

我想这可能会稍微好一点,如果你不经常调用KClass#qualifiedName ,或者缓存结果。 这个属性(和其他使用合法名称的)的当前实现并不像应该那样优化。 事实上,目前我们并没有把注意力放在反射执行的性能上,但在Kotlin 1.0之后,这可能会得到改善。

同时,如果您想跟踪其状态,请在youtrack.jetbrains.com上报告此问题(以及其他任何您会发现的问题)。 谢谢!