Почему мои небезопасные ссылки на объекты вне HEAP становятся недействительными после прибора на основе агента, когда вкJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему мои небезопасные ссылки на объекты вне HEAP становятся недействительными после прибора на основе агента, когда вк

Сообщение Anonymous »

Я строю систему Java с низкой задержкой, которая объединяет управление памятью вне HEAP с использованием sun.misc.unsafe с динамическим прибором байт-кодов (через агент Java). Все работает нормально в нормальных условиях - но в производстве, с включенными сжатыми упс, система начинает показывать странное поведение: < /p>
  • SIGSEGV сбои во время GC
  • выбросы кучей, показывающие поврежденные или смещенные ссылки на объекты
  • Прерывистое воскресение очищенных слабых ссылок
  • Призрачные ссылки становятся надежными (!)
  • Access < /li>
    Кэш -кодовый кеш. Долгое время безотказной работы с многоуровневым компиляцией < /li>
    < /ul>

    ⚙ Стоимость системы: < /h3>

    jvm: openjdk 17, hotspot < /li>

    jvm: openjdk 17, hotspot < /li>
    jvm: openjdk 17, hotspot < /br />
    jvm: openjdk 17, hotspot < /br />
    J Протестирован zgc, та же проблема) < /li>
    Платформа: ARM64 и x86_64 < /li>
    Флаги:
    -XX:+UseCompressedOops
    -XX:+UseCompressedClassPointers
    -XX:+TieredCompilation
    -XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining -XX:+PrintCompilation
    < /code>
    < /li>
    < /ul>

    🧪 Обзор архитектуры < /h3>
    • небезопасно отрезок. />
      unsafe.putLong(bufferAddress + offset, unsafe.getLong(someObject));
      < /code>
      , затем, затем получить их с помощью: < /p>
      Object ref = unsafe.getObject(bufferAddress + offset);
      < /code>

      java Agent Instrmentation < /strong> < /li>
      < /ol>
      Агент времени выполнения изменяет критические методы, такие как SO: < /p>
      . < /li>
      GC работает вскоре после инструментальных инструментов, особенно во время высоких показателей распределения. < /li>
      Память доступна по 8-байтовым распределенным границам. Пробое:

      Отключение сжатых упс с -xx: -Usecompressedoops (исправляет его, но убивает эффективность памяти).
    • Выравнивание адресов вручную по 8 или 16-м. При выключении).
    • Переключение на varhandle (тот же результат при более старых JVM).
    • Избегание каких-либо исключений или путаницы типа в инъекционном коде (все еще попадает в ловушки). />
      ❓ Мои вопросы: < /h3>

      Как сжатые ООП взаимодействуют с небезопасным доступом к памяти, особенно по адресам невыполнения за пределами HEAP? Справочная безопасность?
    • Почему ссылки, хранящиеся вне-heap, ведут себя по-разному в архитектурах процессора (x86 против ARM64), когда сжатые упс включены?
    • Компиляция? < /strong> < /li>
      Каковы паттерны GC-SAFE для работы с отключенными ссылками и агентами, особенно на современных JVM, таких как ZGC или G1? /> Редкая комбинация сжатого сжатого объекта , небезопасные трюки с памятью , преобразование Bytecode и jit fragility
    • возникает только при специфических условиях платформы + платформы + платформы
    • < Недотеринный и может имитировать ошибки GC или повреждение памяти
    • Почти нет публичной документации по этим краям

    Любая понимание того, как становлять становления этой архитектурой или рекомендованные альтернативы с низкой головкой для перекрестной/платформы.
    ---


    Подробнее здесь: https://stackoverflow.com/questions/795 ... fter-agent
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»