2015-12-11 8 views

ответ

3

UPDATE (2016-09-05): вопрос был fixed и будет доступен в Котлин 1.0.5.

Kotlin отражение реализация используется pcollections для кэширования KClass экземпляров для разных классов. Большое количество экземпляров ConsPStack, вероятно, означает, что вы используете отражение на множестве разных классов. Как я уже упоминал в другом ответе, реализация отражения вообще не оптимизирована, поэтому на данный момент несколько ожидаются такие вопросы.

Если эта проблема действительно важна для вас, я бы рекомендовал сократить создание KClass с помощью отражения Java, где это возможно. Кроме того, в качестве экстремального решения вы можете попробовать очистить содержимое описанного кеша в определенный момент. Вот corresponding code in Kotlin project. Поскольку кеш (var K_CLASS_CACHE) является конфиденциальным, вам нужно будет использовать отражение Java, чтобы получить к нему доступ.

+0

Я использую рефлексию для извлечения 'KClass' на несколько классов (' Byte', 'Short',' Int', 'Long',' Float', 'Double',' Boolean' и ' ByteBuffer'). Я обращаюсь к ним через редифицированный родовой тип функции, которая также передается только этими типами. – Jire

+0

Как вы предположили, я смог удалить все из них, заменив все 'KClass' на' Class' и используя отражение, чтобы получить класс Java через 'Example :: class.java' :-) – Jire