我一直在查看 JIT 的一些教程,并在运行时分配大量可执行内存。这主要是一个概念性问题,所以如果我有错误,请纠正我。
如果我理解正确,JIT 会利用运行时解释器/编译器来输出本机或可执行代码,如果是本机二进制,则将其放在内存中的可执行代码堆中,这是特定于操作系统的(例如 Windows 的 VirtualAlloc() , mmap() 用于 Linux)。
此外,像 Erlang 这样的一些语言可以有一个分布式系统,使得每个部分都相互分离,这意味着如果一个失败,其他的可以以模块化的方式解决这种情况,这意味着模块也可以切换进出如果管理得当而不影响整体执行,则可以随意使用。
使用运行时编译器或某种代码交付机制,在运行时任意加载代码以替换可以更新的代码模块不是可行吗?
例子
假设我有一个sort(T, T)
在 T 或 T 上运行的函数。现在,假设我有一个merge_sort(T,T)
在运行时加载的函数。如果我实现一种分类帐或注册系统,以便第一个用户sort(T,T)
可以重新分配自己以使用新merge_sort(T,T)
功能并检测所有用户何时调整自己,那么我应该能够sort(T,T)
从内存中释放和删除。
这基本上听起来很像 JIT,但对我来说,最吸引人的部分是您可以在运行时任意将代码换成模块的方面。这样,当系统没有处于满负荷状态时,每个模块都在使用中,如果需要,模块可以自动切换到新代码等。理论上,这不是一种实现补丁的方法,例如如果程序可以在各个模块中静默地换出代码,那么使用程序的用户永远不必“重新启动”程序?我想更大的分布式系统可以利用这个,但是更小的分布式系统呢?