Я заметил, что мое приложение создает огромные суммы FqNameUnsafe
и FqName
экземпляров. Когда они созданы? Как я могу избежать их создания? (Мне нужно уменьшить создание мусора в моем приложении.)Kotlin: Избегайте создания FqNameUnsafe и FqName
ответ
У меня нет FqNameUnsafe или FqName в моих проектах Котлин. Он включен только в котлин-отражатель (a separate JAR file).
Если вам не нужно использовать kotlin-reflection в приложении, не включайте его в свой путь к классам. В общем, Kotlin компилирует довольно простой JTM-байт-код и не будет создавать много накладных расходов, если они есть, а иногда и выполняет обычную Java, потому что он может inline functions (вы можете найти «служебные» данные в Kotlin Language Documentation для получения дополнительной информации).
Если вам нужно использовать kotlin-reflect, однако, насколько я могу судить, нет никаких вариантов, чтобы настроить, как он это делает, и вы понесете costs typical to reflection (плюс что-то особенное для отражения Котлина, для которого у меня есть " t была в состоянии найти любую полезную документацию).
ОБНОВЛЕНИЕ (2016-09-13): вопрос был fixed и не будет воспроизводимым, начиная с Kotlin 1.1.
Я думаю, что это может быть несколько лучше, если вы вызываете KClass#qualifiedName
реже или кешируете его результаты. Текущая реализация этого свойства (и других, работающих с квалифицированными именами) не так оптимизирована, как должна быть. Фактически, в настоящее время мы не фокусируемся на производительности в реализации рефлексии, но это, вероятно, будет улучшено после Kotlin 1.0.
Просьба сообщить об этой проблеме (и любых других вас) по адресу youtrack.jetbrains.com, если вы хотите отслеживать ее статус. Спасибо!
Спасибо за это. Таким образом, корень моей проблемы заключается в том, что у меня возникают проблемы с кешированием, потому что я разрешаю тип reified generic. Тип, который я извлекаю, не действует так, как я ожидаю, поэтому я использовал «квалифицированное имя» как ленточную помощь. Сначала вы дали ответ на другой вопрос, но сначала это было очень неясно. С тех пор я обновил вопрос и жду ответа на него, если вы все еще интересуетесь: http://stackoverflow.com/questions/33980151/kotlin-reified-generics-dont-seem-to-work-right-for- Еще раз спасибо за сравнение хэш-сравнений. – Jire
Имеет смысл спасибо. – Jire