Kotlin: Избегайте создания FqNameUnsafe и FqName

Я заметил, что мое приложение создает огромное количество FqNameUnsafe и FqName . Когда они созданы? Как я могу избежать их создания? (Мне нужно уменьшить создание мусора в моем приложении.)

введите описание изображения здесь

У меня нет FqNameUnsafe или FqName в моих проектах Kotlin. Он включен только в kotlin-reflect ( отдельный JAR-файл ).

Если вам не нужно использовать kotlin-reflect в своем приложении, не включайте его в свой путь к классам. В общем, Kotlin компилирует довольно простой JTM-байт-код и не будет создавать много накладных расходов, если они есть, а иногда и выполняет обычную Java, потому что он может встроить функции (вы можете искать «накладные расходы» в документации языка Котлин для более Детали).

Однако, если вам нужно использовать kotlin-reflection, то, насколько я могу судить, нет никаких вариантов, чтобы настроить, как это происходит, и вы понесете затраты, типичные для отражения (плюс что-то особенное для отражения Котлина, для которого у меня нет были в состоянии найти любую полезную документацию).

UPDATE (2016-09-13): проблема исправлена и не будет воспроизводимой, начиная с Kotlin 1.1.

Я думаю, что это может стать несколько лучше, если вы вызываете KClass#qualifiedName реже или KClass#qualifiedName его результаты. Текущая реализация этого свойства (и других, работающих с квалифицированными именами) не так оптимизирована, как должна быть. Фактически, в настоящее время мы не фокусируемся на производительности в реализации рефлексии, но это, вероятно, будет улучшено после Kotlin 1.0.

Между тем, сообщите об этой проблеме (и любых других, которые вы найдете) на youtrack.jetbrains.com, если хотите отслеживать ее статус. Спасибо!