前言 本文旨在提高即时编译器中消息发送的效率。尽管参考了Smalltalk,但这个问题适用于大多数动态JIT编译的语言。 问题 给定一个消息发送站点,它可以被分类为单态、多态或巨态。如果消息发送的接收者始终是相同类型,则为单态发送,例如 10 timesRepeat: [Object ...
作为对题目《MSIL和Java字节码有何不同?》的某种跟进,Java虚拟机如何工作与.NET Framework公共语言运行时(CLR)如何工作有哪些主要区别或相似之处?同时,.NET Framework CLR是否是一台“虚拟机”,或者它是否没有虚拟机的属性?
我正在学习Smalltalk。目前我正在使用Squeak,但是是否有一种不需要使用虚拟机(VMs)而是像集成开发环境(IDE)一样的方式来开发Smalltalk的方法呢?
我正在学习总的汇编编程,因此我决定尝试在软件中实现一个“虚拟微处理器”,该处理器具有寄存器、标志和RAM,使用变量和数组实现。但由于我只想模拟任何微处理器的最基本行为,因此我想创建一个只包含必要指令的汇编语言,只有这些指令才是有用的。我的意思是,有一些汇编语言可以进行乘法和交换寄存器值等操作,...
我正在开发一个简单的虚拟机,目前遇到了困难。 我的最初目标是使用一字节长的指令,在小循环和快速计算跳转分派中实现。但现实与此完全不同-256远远不足以覆盖带符号和无符号的8、16、32和64位整数、浮点数和双精度浮点数、指针操作、不同寻址组合等。一种选择是不实现字节和短整型,但目标是要创建一...
在Java中,字符数据类型char使用2个字节表示。包含n个字符的char[]数组需要2n+24字节来表示。 通常情况下,存储包含n个对象(至少是原始类型)的数组需要额外的24字节开销。 为什么我们需要这额外的24个字节?它们如何被使用? 编辑(2015年7月2日):在评论中指出,在程序...
我正在深入研究Java虚拟机规范。我一直在阅读在线的JVM内部书籍,但有一个令我困惑的抽象概念:常量池。以下是书中的摘录: 对于它加载的每种类型,Java虚拟机必须存储一个常量池。Constant Pool是该类型使用的常量的有序集合,包括文字(字符串、整数和浮点数常量)和对类型、字段...
在学习Smalltalk时,我看到了3个不同的虚拟机。它们是Squeak/Pharo/Newspeak。它们之间有什么区别?
我有兴趣实现一个Forth系统,只是为了获得一些构建简单虚拟机和运行时的经验。 开始学习Forth时,人们通常首先学习堆栈及其操作符(DROP,DUP,SWAP等),因此自然会认为它们是原始操作符之一。但事实并非如此。每个操作符都可以分解成直接操作内存和堆栈指针的操作符。稍后再学习存储(!)...