Проверка линеаризуемости lock-free алгоритмов

Вырастает из темы: Основанное на анализе кода fuzzy-планирование потоков с применением lincheck для обнаружения ошибок в многопоточном коде

Варианты модификации сущеcтвующего байт-кода

Подмена ClassLoader`a

Создать свой кастомный:

Create a custom system(java -Djava.system.class.loader=com.example.MyCustomClassLoader)

Использовать библиотеки

https://www.osgi.org/

https://github.com/kamranzafar/JCL

Плюсы:

Это довольно просто

Минусы:

Не понятно, как управлять, кроме как через параметры jvm

Только статическая инициализация

Распостраняется на все использования данного класса в программе

Java instrument

Java Agent - позволяет менять байт-код

Javassist - позволяет генерировать байт-код

Attach API(https://docs.oracle.com/javase/8/docs/jdk/api/attach/spec/index.html) - позволяет менять его на лету

Плюсы:

Динамическая замена байт-кода(возможно даже в конкретном потоке)

Классический способ для подмены реализации класса(см. jRebel)

Минусы:

Много лишних действий для получения результата

Ссылки:

https://www.baeldung.com/java-asm

https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html