Kotlin:避免创建FqNameUnsafe和FqName

时间:2015-12-03 20:10:35

标签: performance garbage-collection kotlin garbage jvm-languages

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

enter image description here

2 个答案:

答案 0 :(得分:2)

我的Kotlin项目中没有FqNameUnsafe或FqName。它仅包含在kotlin-reflect(a separate JAR file)中。

如果您不必在应用程序中使用kotlin-reflect,则不要将其包含在类路径中。一般来说,Kotlin编译成非常简单的JVM字节码,并且不会产生很多开销(如果有的话),有时会执行普通Java,因为它可以inline functions(你可以在{{中搜索“开销”) 3}}了解更多详情。)

但是,如果你确实需要使用kotlin-reflect,那么据我所知,没有选项可以调整它是如何做的,你会产生Kotlin Language Documentation(加上特定于Kotlin反射的任何东西)我找不到任何有用的文档。)

答案 1 :(得分:1)

更新(2016-09-13):问题一直是fixed,从Kotlin 1.1开始不会再现。

如果你不经常调用KClass#qualifiedName或者缓存结果,我想这可能会有所改善。此属性的当前实现(以及使用限定名称的其他人)并没有像应该的那样进行优化。事实上,目前我们没有关注反射实现中的性能,但在Kotlin 1.0之后可能会有所改进。

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