标签: vm-implementation

Java的虚拟机和CLR

作为MSIL和Java字节码之间的差异问题的一种跟进,Java虚拟机的工作方式(主要)差异或相似之处是什么?.NET Framework 公共语言运行时(CLR)有效吗?

还有,是 .NET框架 CLR是"虚拟机"还是没有虚拟机的属性?

.net java cil bytecode vm-implementation

136
推荐指数
4
解决办法
4万
查看次数

为什么基于JVM堆栈和Dalvik VM注册?

我很好奇,为什么Sun决定以JVM堆栈为基础,Google决定以DalvikVM注册为基础?

我想JVM不能真正假设目标平台上有一定数量的寄存器,因为它应该是平台无关的.因此,它只是将寄存器分配等推迟到JIT编译器.(如我错了请纠正我.)

所以Android人员认为,"嘿,那效率很低,让我们马上去找一个基于寄存器的vm ......"?但等等,有多个不同的Android设备,Dalvik的目标是多少个寄存器?Dalvik操作码是否针对一定数量的寄存器进行了硬编码?

目前市场上所有Android设备的寄存器数量是否相同?或者,是否在dex-loading期间执行了寄存器重新分配?这一切如何结合在一起?

jvm computer-architecture dalvik cpu-registers vm-implementation

95
推荐指数
3
解决办法
2万
查看次数

Java Constant Pool的目的是什么?

我目前正在尝试深入研究Java虚拟机的规范.我一直在网上阅读JVM内容,有一个令人困惑的抽象,我似乎无法理解:Constant Pool.这是本书的摘录:

对于它加载的每种类型,Java虚拟机必须存储常量池.常量池是类型使用的有序常量集,包括文字(字符串,整数和浮点常量)以及对类型,字段和方法的符号引用.常量池中的条目由索引引用,非常类似于数组的元素.因为它包含对类型使用的所有类型,字段和方法的符号引用,所以常量池在Java程序的动态链接中起着核心作用

关于上述内容和CP,我有几个问题:

  1. CP是否位于.class每种类型的文件中?
  2. 作者的"象征性参考"是什么意思?
  3. 什么是Constant Pool的目的,用简单的英语?

java class-constants vm-implementation

65
推荐指数
3
解决办法
3万
查看次数

寄存器与堆栈

使用基于寄存器的虚拟机与使用基于堆栈的虚拟机有什么优缺点?

对我而言,基于寄存器的机器似乎更直接的编程和更高效.那么为什么JVM,CLR和Python VM都是基于堆栈的呢?

language-agnostic stack-based vm-implementation

56
推荐指数
5
解决办法
2万
查看次数

CLR是虚拟机吗?

我读过一本书,将.net CLR称为虚拟机?谁能证明这一点?我们在某些开发平台上需要虚拟机概念的原因是什么?

是不是可以开发一个完全面向对象并且像.net一样强大的本机框架[没有虚拟机的框架]?

将CLR称为虚拟机的书是" Professional .Net Framework 2.0 ".

.net clr vm-implementation

51
推荐指数
3
解决办法
2万
查看次数

如何在x86程序集中编写自修改代码

我正在为最近一直在研究的业余爱好虚拟机编写JIT编译器.我知道有点汇编,(我主要是一个C程序员.我可以阅读大多数汇编参考我不理解的操作码,并编写一些简单的程序.)但我很难理解这几个例子我在网上找到的自修改代码.

这是一个这样的例子:http://asm.sourceforge.net/articles/smc.html

提供的示例程序在运行时进行了大约四种不同的修改,其中没有一个被清楚地解释.Linux内核中断被多次使用,没有解释或详细说明.(作者在调用中断之前将数据移动到几个寄存器中.我假设他正在传递参数,但这些参数根本没有解释,让读者猜测.)

我正在寻找的是自修改程序代码中最简单,最直接的例子.我可以看到的东西,用于理解如何编写x86程序集中的自修改代码,以及它是如何工作的.您是否有任何资源可以指向我,或者您可以提供的任何示例都能充分证明这一点?

我正在使用NASM作为我的汇编程序.

编辑:我也在Linux上运行此代码.

x86 assembly jit self-modifying vm-implementation

46
推荐指数
2
解决办法
2万
查看次数

即时编译和堆栈替换之间的差异

他们俩几乎都做同样的事情.确定方法很热并编译它而不是解释.使用OSR,您只需在编译后立即转移到编译版本,这与JIT不同,后者在第二次调用方法时调用编译代码.

除此之外,还有其他差异吗?

java compiler-construction jit jvm vm-implementation

43
推荐指数
2
解决办法
7981
查看次数

用于实现VM的教程/资源

我希望自我教育的目的是为动态语言实现一个简单的虚拟机,更喜欢C语言.比如Lua VM,Parrot或Python VM,但更简单.除了查看现有虚拟机的代码和设计文档之外,是否有任何有关实现此目标的良好资源/教程?

编辑:为什么关闭投票?我不明白 - 这不是编程.如果我的问题有特定问题,请评论.

c vm-implementation

42
推荐指数
2
解决办法
1万
查看次数

什么是原始的Forth运营商?

我对实现Forth系统感兴趣,因此我可以获得构建简单VM和运行时的一些经验.

当在Forth开始时,人们通常首先了解堆栈及其运算符(DROP,DUP,SWAP等),因此很自然地将它们视为原始运算符之一.但他们不是.它们中的每一个都可以分解为直接操作内存和堆栈指针的运算符.后来人们学习了存储(!)和获取(@),可以用来实现DUP,SWAP等等(哈!).

那么原始运营商是什么?哪些必须直接在运行时环境中实现,可以从中构建所有其他环境?我对高性能不感兴趣; 我想要一些我(和其他人)可以学习的东西.运营商优化可以在以后进行

(是的,我知道我可以从图灵机启动并从那里开始.这有点极端.)

编辑:我的目标是类似于引导操作系统或新编译器.我至少需要做什么才能实现,以便我可以用这些原始构建块构建系统的其余部分?我不会在裸硬件上实现它; 作为一项教育活动,我会编写自己的最小虚拟机.

interpreter operators forth vm-implementation

35
推荐指数
3
解决办法
9730
查看次数

为什么用JIT编译器(就应用程序性能而言)难以击败AOT编译器?

我认为JIT编译器最终将在编译代码的性能方面击败AOT编译器,因为JIT具有固有的优势(可以使用仅在运行时可用的信息).一个论点是AOT编译器可以花更多时间编译代码,但服务器VM也可能花费大量时间.

我知道JIT确实在某些情况下击败了AOT编译器,但在大多数情况下它们似乎仍然落后.

所以我的问题是,阻止JIT编译器击败AOT编译器的具体而棘手的问题是什么?

编辑:
一些常见的论点:

  • AOT编译器可以花更多时间进行高级优化- >如果您运行的服务器虚拟机数天,您可以花费相同的时间,如果不是更长的话.
  • 字节代码解释有成本- >大多数JIT编译器最近都会缓存本地机器指令.

另一个编辑:
有关具体示例,请参阅此文章:改进Swing性能:JIT与AOT编译.从我从本文中可以收集的内容来看,作者基本上说当没有热点时,运行时信息的优势会降低,因此没有JIT开销的AOT就会获胜.但是40%?这似乎没有多大意义.仅仅是因为这种情况没有调整被比较的JIT编译器吗?还是更基本的东西?

compiler-construction performance jit vm-implementation

33
推荐指数
1
解决办法
1万
查看次数