Operating system 除了可移植性之外,字节码JIT执行是否比本机代码有任何真正的优势?(通用和操作系统设计)

Operating system 除了可移植性之外,字节码JIT执行是否比本机代码有任何真正的优势?(通用和操作系统设计),operating-system,bytecode,jit,vm-implementation,Operating System,Bytecode,Jit,Vm Implementation,除了可能实现平台无关性之外,字节码JIT执行是否比本机代码有任何真正的优势 显然,使用“虚拟机”而不是字节码JIT执行的语言有几个优点。但在何种程度上,这会真正影响关于本机代码和JIT执行的优缺点的讨论 下面是我识别的属性列表,问题是这也适用于本机代码的扩展是什么-如果编译器支持它 安全性 VM运行时环境可以观察正在运行的应用程序,例如缓冲区溢出 所以第一个问题是,这是由“运行时环境”完成的,也就是说,是由类库还是在JIT执行期间完成的 内存边界检查也适用于本机代码编译器。这里有其他/一般限制

除了可能实现平台无关性之外,字节码JIT执行是否比本机代码有任何真正的优势

显然,使用“虚拟机”而不是字节码JIT执行的语言有几个优点。但在何种程度上,这会真正影响关于本机代码和JIT执行的优缺点的讨论

下面是我识别的属性列表,问题是这也适用于本机代码的扩展是什么-如果编译器支持它

安全性

VM运行时环境可以观察正在运行的应用程序,例如缓冲区溢出

  • 所以第一个问题是,这是由“运行时环境”完成的,也就是说,是由类库还是在JIT执行期间完成的

  • 内存边界检查也适用于本机代码编译器。这里有其他/一般限制吗

优化

在本机代码编译器中,经典优化也应该是可能的。请参阅LLVM,它实际上使用生成的位代码在编译为本机代码之前运行优化

  • 也许JIT中会有类似于动态优化的东西,例如,识别与执行上下文相关的要优化的东西。本机编译器也可能生成一些代码来优化运行时的执行。但我不知道这样的事情是否得到了实施

  • 流行的VM实现可以做到这一点——问题是,这是否真的可以成为相对于本机代码的真正优势的借口

线程化

我不认为VM中的线程依赖于操作系统的本机线程实现

如果我们发现与本机代码相比没有真正的优势,而且JIT中总是存在运行时缺陷。。。然后引出下一个问题:

基于JIT执行(如奇点、宇宙等)的操作系统设计有意义吗

我可能会发现一个优点:采用这种设计的操作系统不需要MMU。意味着不存在使用MMU的过程分离,而是软件中对象/组件之间的分离。但是值得吗

致以最良好的祝愿;-)

理论上,他们可以利用运行的平台/CPU来编译更快的代码

实际上,我个人还没有遇到过任何实际发生这种情况的案例

但还有其他问题。编译成字节码的高级语言也有垃圾收集,这在某些领域非常有用。这并不是因为JIT编译器本身,但抖动使它实际上更容易,因为抖动通常更容易分析和计算语言,例如指针在堆栈上的位置等。理论上,它们可以利用运行的平台/CPU来编译更快的代码

实际上,我个人还没有遇到过任何实际发生这种情况的案例


但还有其他问题。编译成字节码的高级语言也有垃圾收集,这在某些领域非常有用。这并不是因为JIT编译器本身,但抖动实际上使它变得更容易,因为抖动通常更容易分析和计算语言,例如指针在堆栈上的位置等。

CLR JIT编译器实际上根据CPU生成不同的代码,因为几年来:@delnan:我说的是更快的代码,不仅仅是不同的代码。我个人从未见过抖动优化代码比本机编译器更好,但可能是因为我的无知,idk。@delnan:哦,我读过,好吧——但它说的只是“我们利用了”,没有提供任何示例(例如,在C#vs C++中类似的东西)。对我来说,“我们利用”和“我们可以利用”之间没有现实的区别——我需要看一个实际的例子,然后才能声称它是有利的。目前,我还没有看到任何,但再一次,也许我只是对它们视而不见……如果你需要在肉眼可见的情况下提高性能,那么你可能就没有运气了。这种优化在任何情况下都只会产生微小的改进(在AOT编译器中也是如此——GCC或LLVM团队最后一次自豪地宣布由于指令选择的更改而实现10%的总体性能改进是什么时候?)。但我很感兴趣:你是否曾经执行过微基准测试来检查这些东西,或者你是否期望一个用Java编写的网络服务在半秒网络延迟的情况下运行速度会因为这些优化而提高25%?@delnan:嗯,我个人并不真的关心微优化——如果你没有注意到的话,如果它们不存在,那就没什么区别了。一般来说,我没有注意到可比C代码运行速度比C++代码快。但是我也不笨(是的,I/O绑定!=CPU绑定,yada-yada),所以我没有尝试你的后一个建议。CLR JIT编译器实际上会根据CPU生成不同的代码,因为几年来:@delnan:我说的是更快的代码,而不仅仅是不同的代码。我个人从未见过抖动优化代码比本机编译器更好,但可能是因为我的无知,idk。@delnan:哦,我读过,好吧——但它说的只是“我们利用了”,没有提供任何示例(例如,在C#vs C++中类似的东西)。对我来说,“我们利用”和“我们可以利用”之间没有现实的区别——我需要看一个实际的例子,然后才能声称它是有利的。目前,我还没有看到任何,但再一次,也许我只是对它们视而不见……如果你需要在肉眼可见的情况下提高性能,那么你可能就没有运气了。这种