Помогите Рефлексия и с чем ее едят.

Lisenochek

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Lisenochek
Всем привет. Решил разобраться с рефлексией, так как планирую выпустить свой первый публичный плагин на просторы помойки интернета. Кто разбирается можете помочь мне разобраться с этим?
 
А зачем она тебе нужна? Если ты можешь что-то написать без участия рефлексии, это в большинстве случаев означает что она и не нужна..
Ну для паблик плагина как раз нужна, если надо писать функционал на пакетах.
 
Сама по себе рефлексия с одной стороны выручает, когда нужна мультиверсионность.Но я имел в виду то, что плагин, использующий ресурсы, зависимые от версии, это уже не так хорошо, как если бы плагин работал на чистом BukkitAPI.Проблемы с зависимостями решает как раз таки рефлексия.А вот она уже, зачастую, работает в ущерб производительности.Так что я немного неправильно выразился, зло не рефлексия, а то, ради чего мы её используем, хоть и в самом факте её использования есть минусы(производительность):)
 
Сама по себе рефлексия с одной стороны выручает, когда нужна мультиверсионность. Но я имел в виду то, что плагин, использующий ресурсы, зависимые от версии, это уже не так хорошо, как если бы плагин работал на чистом BukkitAPI.Проблемы с зависимостями решает как раз таки рефлексия.А вот она уже, зачастую, работает в ущерб производительности.Так что я немного неправильно выразился, зло не рефлексия, а то, ради чего мы её используем, хоть и в самом факте её использования есть минусы(производительность):)
как по мне, так это ↑, вообще никак не уменьшает желание и необходимость использовать рефлексию.
да, она кушает производительность, но в чистом ведрышке, зачастую вообще нет нужного нам. а отправка пакетов - снова рефлексия, либо же подключение протоколлиба, что опять же не есть гуд. Так что на счет зла, это еще как посмотреть.

для себя, проблему с рефлексией решил тем, что все объекты, которые создаются с ее помощью, создаются в onEnable и дальше просто лежат в мапах, сетах и т.д.

В любом случае, не вижу совершенно никаких проблем в использовании рефлексий и в причинах их использования. (ну а если с мозгами не лады, и генерация объектов будет постоянно, то тут и обычные методы нагрузят не мало)
 
как по мне, так это ↑, вообще никак не уменьшает желание и необходимость использовать рефлексию.
да, она кушает производительность, но в чистом ведрышке, зачастую вообще нет нужного нам. а отправка пакетов - снова рефлексия, либо же подключение протоколлиба, что опять же не есть гуд. Так что на счет зла, это еще как посмотреть.

для себя, проблему с рефлексией решил тем, что все объекты, которые создаются с ее помощью, создаются в onEnable и дальше просто лежат в мапах, сетах и т.д.

В любом случае, не вижу совершенно никаких проблем в использовании рефлексий и в причинах их использования. (ну а если с мозгами не лады, и генерация объектов будет постоянно, то тут и обычные методы нагрузят не мало)
Я не совсем это имел в виду.Я хотел сказать, что в плагине нужно, по-возможности, избегать компонентов, которые зависят от версии игры, так как это создает некоторые проблемы с дальнейшей поддержкой кода, да и вообще, мороки меньше.Если же от использования таких элементов не уйти, то тут уже приходит на помощь рефлексия, хоть и в ущерб производительности.Но, как выше заметили, для подобных целей иногда можно использовать и другие инструменты.Так же стоит учесть, что если для реализации некоторого функционала необходимо использовать инструменты, которые ценность это функционала не оправдывают, то нужен ли он вообще?Иными словами, для реализации какой-то мелочи используют инструменты, в присутствии которых, общий КПД(если так можно сказать) близиться к нулю, либо даже тянет программу целиком в минус.Так что, стоит подумать, прежде чем создавать подобного рода компоненты программы.
 
либо же подключение протоколлиба, что опять же не есть гуд.
Найди хоть 1 топ сервер без протоколсапорта или виаверсии. Так что протоколлиб там основа и есть у всех. Все там гуд. Другое дело сервера с модами, там не везде можно юзать протоколлиб.
 
Найди хоть 1 топ сервер без протоколсапорта или виаверсии. Так что протоколлиб там основа и есть у всех. Все там гуд. Другое дело сервера с модами, там не везде можно юзать протоколлиб.
+1, преимущества протоколлиба сложно переоценить.
 
Скину свой класс с рефлексией, всегда им пользуюсь и очень удобно.
 
Тем, что протокол либом я не пользовался, а апи довольно гибкое и использовалось оно реально везде.
В противовес могу сказать, что протоколлибом пользовались сотни людей и никто не жалуется на негибкость. Думаю им тоже реально везде пользовались.
И второе - протоколлиб стоит практически везде, так что он не сильно обременяет плагин как зависимость.
 
В противовес могу сказать, что протоколлибом пользовались сотни людей и никто не жалуется на негибкость. Думаю им тоже реально везде пользовались.
И второе - протоколлиб стоит практически везде, так что он не сильно обременяет плагин как зависимость.
+1 А вот левый апи на те же пакеты явно будет лишним. И хочу заметить, замерял скорость получения nbt с итемстака простой рефлексией и протоколлибом, в разы быстрее с прокотолом.
 
Отвечу сразу всем в этом треде. Почему я против ПротоколЛиба и прочих таких штук? Это значительно влияет на производительность. Причём похлеще, чем рефлексия (скорее всего внутри PL она тоже есть, к слову).
Большое количество пакетов порождает соответствующее количество врапперов (или как там называются обертки пакетов). Создавать враппер под каждый пакет - это нецелесообразно как минимум по той причине, что из всех видов пакетов по факту будут использоваться процентов десять. Но сборщику мусора от этого не легче.
А уж если пакеты и вовсе не нужно принимать, то какой смысл использовать ПротоколЛиб? Возможно, конечно, прослушка и отключается в конфиге, но что-то я сомневаюсь.
Вообще я слышал, что ПротоколЛиб и врапперы теперь разделены. Не совсем понятно, как это работает. Но если всё же работает, то и вправду можно использовать какую-нибудь публичную библиотеку.

Также хотел спросить у рефлексофобов, чем же так плох этот инструмент? Что конретно в нём нагружает значительно больше, чем самый обычный линейный код? Если всё грамотно кэшировать, то никакой значительной разницы между обычным кодом и рефлексией не будет. Вы даже в байткоде различий не найдете - что тут, что там вызов конкретных конструкторов или методов, что тут, что там работа с определёнными полями. Ещё раз повторюсь, что нужно лишь научиться кэшировать классы, поля, методы и всё остальное, что понадобится в рантайме. Помнится, при каких-то тестах рефлексия по времени даже выигрывала у обычного кода.

Что касается асм, то штука, конечно, приятная, да вот только сложная. На создание кода может уходить в десятки, а то и в сотни больше человекочасов. Непозволительная роскошь.
 
Помнится, при каких-то тестах рефлексия по времени даже выигрывала у обычного кода.
Так не бывает.
А вот asm реально рулит, можно один раз пропатчить и не лезть в рефлексии вообще. И не потерять производительности.
P.s сервера с мультиверсиями спокойно тянут до 800 онли, сомневаюсь что протокол хоть где то тормозит.
Другое дело с модами, там может что то не так напатчится и будет работать не корректно. Ибо моды любят изменять ванилоклассы.
 
Назад
Верх