С automatically recompiled and injected into a running program.
Я предполагаю, что вы говорите о том, что JVM фактически наблюдает за выполнением программы и, например, изменяет прогнозируемые значения ветвлений во время выполнения, чтобы минимизировать переходы и отмену конвейеризации.
Это можно сделать в Javaпотому что существует отдельная четко определенная промежуточная стадия между исходным кодом и фактическими машинными инструкциями.Это позволило бы ему заменить промежуточный код во время выполнения, возможно, улучшив производительность.
В C ++ программа встроена непосредственно в машинный язык конкретной архитектуры, а на большинстве аппаратных средств кодовые страницы читаются только по разным причинам, включая предотвращение случайногои изменения вредоносного кода.
Теперь, что вы могли бы сделать в C ++, это использовать что-то вроде библиотеки Clang для перестройки разделов кода в общий объект, а затем использовать dlopen
и т. д. для открытияперекомпилированный общий объект, чтобы выбрать новую версию машинного кода.Это, конечно, требует, чтобы ваша программа была намного умнее, чем Java-программа, чтобы использовать преимущества JVM.Я полагаю , что в g ++ / gprof есть режим, в котором данные профилирования могут использоваться, чтобы повлиять на оптимизацию g ++, может, это то, что вы ищете?