javascript - 不同进程虚拟机的 JIT 编译器如何实现事件窥视?

标签 javascript java virtual-machine smalltalk jit

注意:这个问题是针对 Smalltalk、Self、Javascript、Java、C# 等语言的 VM 实现者提出的。

JIT 编译器带来的一个常见功能是自动查看系统事件。这用于处理 UI 事件和触发 GC。

通常,此事件窥视包括在框架构建(调用方法时)和循环回跳时进行检查。我想知道,

what are the different ways of implementing this check? What are their advantages and disadvantages? Do you know of any paper describing these techniques?

Could you tell how it is implemented in a specific VM? (Pharo, HPS, HotSpot, V8, SpiderMonkey, CLR)

最佳答案

从我读到的内容来看,我猜每个实现都会做以下一些变化:

  • 分配一个专门用于计数的硬件寄存器,并在达到某个阈值时进行窥视。 优点:检查速度非常快。缺点:您失去了一个可以更好地使用的寄存器,计数可能不精确/没有意义。

  • 有一个定期发出信号的计时器(如何实现?),然后:

    • 移动一个 stack_limit 变量,然后在构建框架和回跳时检查该变量
    • 将堆栈标记为只读或在硬件级别不可访问(即分页),以便框架构建失败并在回跳之前向堆栈添加写入。 编辑:优点:由于数据依赖性,写入内存比读取更快。缺点:如果计数器被频繁触发,检查会变慢,因为页面错误捕获很慢。安全点被污染:任何在页面被标记后使用堆栈的指令都会触发检查,并且该指令可能是也可能不是安全点

关于javascript - 不同进程虚拟机的 JIT 编译器如何实现事件窥视?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31125309/

相关文章:

javascript - 提升导致 jQuery 中的问题

java - 使用 Java API 的 Elasticsearch 复杂查询

Azure 连接问题

javascript - 是否可以在 IE6 中获取 DOM 选择元素的值?

javascript - 在该对象生成的 HTML 元素中引用 JS 对象

javascript - 检查 jQuery 是否单击了包含 img 的 anchor 元素

android - Genymotion 增加内部存储空间

Java 条件导入

java - 如何获取当前过滤后的TableModel

mysql - 尝试利用azure windows 2012 R2虚拟机mysql但无法访问它