1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Как отправить ItemStack в чат?

Тема в разделе "Разработка плагинов для новичков", создана пользователем Snowmaze, 15 июн 2019.

  1. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Тут нет смысла в рефлекии, обфнутый метод меняется от версии к версии. Все равно пойдете переписывать. Да и прямой вызов быстрее.
     
  2. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Несколько наносекунд прироста производительности не имеют смысла никакого.
     
  3. AbstractCoder

    AbstractCoder Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну бред себе внушил про неск наносекунд) Каждый раз доставать Method/Field это тебе не неск наносекунд, + каждый вызов будет делать проверку доступа + каждый метод через N вызовов будет генерировать класс в рантайме для прямого вызова, а генерация класса в рантайме оч затратная операция по сравнению с вызовами метода рефлексией, так что если методов много, то это довольно не оч. В любом случае MethodHandle удобней и быстрее старой рефлексии.

    По поводу меняющихся методов - можно делать вызов разных методов в зависимости от версии.
     
  4. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Конечно же имеется ввиду, что доставаться они будут только один раз, использоваться - множество.
    И здесь рефлекция проигрывает не меньше чем в 5 раз в среднем (судя по бенчмаркам из разных сурсов).

    Если один вызов из рефлекции будет занимать 10 наносекунд, а вызов из хендла - 3 наносекунды, при этом учитывай сколько здесь будет будет событий чтобы отображать в чат вещь? Допустим 100 раз в секунду. Вместо 1000 наносекунд мы потратим 300 за секунду, а это 0.0007 ms. Ну что? Не будет теперь лагать сервер? Здесь только обработка события будет в разы больше занимать.

    Потому как бы сама идея говорить что юзай 100500 директ NMS классов для разных версий вместо одной рефлекции бредовая, когда не идет речи о сильно интенсивных вызовах и конечно же не инициализации Method / Field etc каждый раз.

    Офк я не осуждаю чтобы кто то юзал MethodHandle вместо рефлекции, а лишь хочу показать суть необъективной оценки прироста производительности.
     
    Последнее редактирование: 15 июн 2019
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    С таким же успехом меняется импорт под новую версию, если уже в сурсы залез.
     
  6. AbstractCoder

    AbstractCoder Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну так рефлексия сосет и по удобности и по произволительности. Дальше ищи опровдания тому, что застрял на java 6. Удачи вручную переопределять accessible и вручную снимать final с полей.
     
    Последнее редактирование: 16 июн 2019
  7. AbstractCoder

    AbstractCoder Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Есть кейсы где нужна мультиверсионная поддержка, а писать реализации для каждой версии не оч хочеца, а так для своего прямые вызовы из нмс дергать и збс.
     
    Последнее редактирование: 16 июн 2019
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Не страдаю таким. Да и это все делается генерацией прокси классов на асме, по нормальному. Так скорость не теряется.
     
    Последнее редактирование: 16 июн 2019
  9. AbstractCoder

    AbstractCoder Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Рефлексия сама генерирует классы если вызовы частые, но операция генерации класса в рантайме оч затратная, как я уже писал. Прокси классы собсна лучший выход да.
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Как не пытайся, не добиться скорости как у прямого вызова.
     
  11. AbstractCoder

    AbstractCoder Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Поэтому надо юзать губку :good:
     

Поделиться этой страницей