Прежде всего, JVM не позволяет вам изменять работающий код. Это позволяет вам генерировать новый код во время выполнения и загружать его.
Кроме того, существует проект, спонсируемый Oracle (GraalVM), в котором (если я правильно понимаю) вы можете создавать (Truffle) AST и иметь структуру, которая позаботится о генерации кода. (В настоящий момент он кажется экспериментальным и может быть еще не готов к использованию.).
Кроме того, как влияет производительность на изменение кода времени выполнения.
Это вопрос за $ 65 536!
Одним из следствий этого является то, что каждый раз, когда вы изменяете код (путем его регенерации), метод должен перезагружаться и (для обычной JVM) снова проходить фазы интерпретации и компиляции JIT. И потенциально де-оптимизация / повторная оптимизация другого кода, который зависит от модифицированного кода.
Это не будет дешево. Я предполагаю порядка десятков или сотен тысяч собственных инструкций на метод , каждый раз, когда вы делаете это.
Теперь следующая оптимизация, которую я хочу сделать, это изменить код во время выполнения ...
OK. Поэтому я думаю, что на самом деле было бы лучше сделать более сложную генерацию кода.
Но также имейте в виду, что JIT-компилятор будет оптимизировать ваши сгенерированные байт-коды, выполняя такие вещи, как предсказание переходов на основе статистики, собранной во время интерпретации метода (до компиляции JIT).
Я бы также посоветовал опробовать некоторые из ваших оптимизаций вручную и сравнить их перед тем, как приступить к реализации собственного оптимизатора.