Как я могу избежать массивного количества ConsPStack
, которые были созданы приложением? Когда они созданы? Мое приложение: https://github.com/Jire/AbendigoKotlin: Массивное количество ConsPStack, как я могу избежать?
ответ
UPDATE (2016-09-05): вопрос был fixed и будет доступен в Котлин 1.0.5.
Kotlin отражение реализация используется pcollections для кэширования KClass
экземпляров для разных классов. Большое количество экземпляров ConsPStack
, вероятно, означает, что вы используете отражение на множестве разных классов. Как я уже упоминал в другом ответе, реализация отражения вообще не оптимизирована, поэтому на данный момент несколько ожидаются такие вопросы.
Если эта проблема действительно важна для вас, я бы рекомендовал сократить создание KClass
с помощью отражения Java, где это возможно. Кроме того, в качестве экстремального решения вы можете попробовать очистить содержимое описанного кеша в определенный момент. Вот corresponding code in Kotlin project. Поскольку кеш (var K_CLASS_CACHE
) является конфиденциальным, вам нужно будет использовать отражение Java, чтобы получить к нему доступ.
Я использую рефлексию для извлечения 'KClass' на несколько классов (' Byte', 'Short',' Int', 'Long',' Float', 'Double',' Boolean' и ' ByteBuffer'). Я обращаюсь к ним через редифицированный родовой тип функции, которая также передается только этими типами. – Jire
Как вы предположили, я смог удалить все из них, заменив все 'KClass' на' Class' и используя отражение, чтобы получить класс Java через 'Example :: class.java' :-) – Jire