О генерации DLL: дополнительный требуемый ввод-вывод для этого, плюс связывание, плюс сложность генерации формата DLL, значительно усложнит процесс, и, прежде всего, снизит производительность; Кроме того, в конце концов вы по-прежнему вызываете указатель функции на загруженный код, так что ...
Кроме того, JIT-компиляция может выполняться по одному методу за раз, и если вы захотите это сделать, вы сгенерируете множество маленьких DLL.
Что касается требования "исполняемого раздела", вызов mprotect () в системах POSIX может исправить разрешения (аналогичный API есть в Win32). Это необходимо сделать для большого сегмента памяти, а не для каждого метода, так как в противном случае он будет слишком медленным.
На простой x86 вы не заметите проблему, на x86 с PAE или на 64-битных 64-битных машинах AMD64 / Intel вы получите ошибку.