V8如何管理对象实例的内存?

2023-12-01

http://code.google.com/apis/v8/design.html

上一页解释了 v8 团队用于实现快速属性访问的优化技术。

但它的对象实例又如何呢?新属性可以随时添加到对象中,因此应该允许其大小增长。它是否只是简单地分配默认大小的内存,并在达到大小限制时创建一个新的缓冲区并将旧实例复制到新缓冲区?或者还有其他很酷的技巧?


V8 中新分配的 JavaScript 对象看起来像 (->意思是“指向”):

[ class       ] -> ... ; pointer to the hidden class
[ properties  ] -> [empty array]
[ elements    ] -> [empty array] ; elements are properties with numeric names
[ reserved #1 ] -\
[ reserved #2 ]  |
[ reserved #3 ]  }- space reserved for "in object properties"
...............  |
[ reserved #N ] -/

每个对象中都有一定的空间预先分配给所谓的对象属性。 V8 根据构造函数选择预分配属性的数量(例如,以下形式的赋值数量)this.field = expr)和运行时分析。

当您向对象添加新属性时,V8 首先尝试放入预先分配的对象内槽中。当对象内槽耗尽时,V8 开始将它们放入对象外属性数组中。属性名称和属性索引之间的映射存储在隐藏类中。例如 JS 对象{ a: 1, b: 2, c: 3, d: 4} might看起来像:

[ class       ] -> [a: in obj #1, b: in obj #2, c: out obj #1, d: out obj #2]
[ properties  ] -> [  3  ][  4  ] ; this is linear array
[ elements    ]    
[ 1           ]
[ 2           ]

If properties数组变得太大 V8 会正常化一个对象:将其属性转换为字典形式:

[ class       ] -> [ OBJECT IS IN DICTIONARY MODE ]
[ properties  ] -> [a: 1, b: 2, c: 3, d: 4, e: 5] ; this is classical hash table
[ elements    ]    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

V8如何管理对象实例的内存? 的相关文章

  • 在 Chrome 中使用 Array.prototype.sort 时数组的奇怪排序

    我在使用时发现了一个奇怪的现象Array prototype sort 在一系列数字上 我不确定是什么原因造成的 我的目标是使用反转数组sort 不使用reverse 所以我可以像这样链接它 const shouldReverse Math
  • 在 V8 中执行函数的具体执行次数是多少之后变得很热?

    我正在学习 V8 的内部工作原理 发现有 JIT 编译器 它可以通过内联缓存技术动态优化热函数 我只有两个问题 第一 函数只要连续执行几次就算热函数吗 其次 V8 中函数在重复执行多少次之后就会变热 V8 开发者在这里 函数的 热度 不仅仅
  • Node 和 Chrome (V8) 中块作用域内的 const

    我正在编写一个nodejs v4 2 4 应用程序 我遇到了一些奇怪的行为 function A number this number number for var i 0 i lt 3 i const a new A i console
  • 为什么 for 循环中声明的变量的最后一次迭代没有被垃圾收集?

    我的问题是这是否是一个nodejs垃圾收集器错误 或者这是某种预期的 在 Windows 上运行节点 v14 15 0 在寻找答案时这个问题涉及 WeakRef 对象时 我发现了关于垃圾收集的一个奇怪的事情 这似乎是一个可能的错误 分配给在
  • 箭头函数比 v8 中的普通独立函数声明更快(性能更高、更轻)吗?

    我问这个问题是因为我和我的同事在编码风格上存在争议 因为他更喜欢箭头函数声明 const sum a b gt a b 我更喜欢旧式的独立函数声明 function sum a b return a b 我的观点是 旧式代码更具可读性 您可
  • 为什么括号会导致对象解除绑定?

    当我用括号包围一个新对象调用并立即调用它的方法时 Node 或者一般来说只是 v8 将抛出 TypeError this getName 不是函数 错误 如果我不将它包裹在括号中 则不会抛出任何错误this已正确绑定 function Gr
  • 在 Windows 上构建 google v8 作为共享库?

    是否可以在 Windows 上使用 gyp 将 googles v8 构建为共享库 msvc 2012 我尝试的一切都不起作用 我尝试过的 python build gyp v8 Dcomponent shared library pyth
  • 追踪流星/节点光纤中的堆栈溢出

    我现在看到了这个崩溃 并且对节点光纤基础设施不够熟悉 不知道从哪里开始解释错误或检测代码 Meteor server running on http localhost 3000 W202407 10 06 05 740 8 STDERR
  • 当进程内存不足时如何处理 V8 引擎崩溃

    Both node http nodejs org 控制台和基于Qt5的V8QJSEngine http qt project org doc qt 5 0 qtqml qjsengine html可以通过以下代码崩溃 a for a pu
  • 从 v8::Arguments 转换为 C++ 类型

    我正在尝试用 C 创建 Node js 模块 但我对 v8 Arguments 类感到困惑 假设我有一个用于发送电子邮件的 Javascript 类 它有一个具有以下签名的方法 Mailer sendEmail Array recipien
  • V8 中 JSON.stringify() 是确定性的吗?

    我还没见过 还没 JSON stringifyNode JS 中的不确定性 不能保证它在规范级别上具有确定性 但是V8呢 它的实现是确定性的吗 是否能保证它在未来的 V8 版本中保持确定性 Edit 对于确定性 我的意思是无论以下断言的值是
  • HandleScope 背后的设计原理是什么?

    V8 需要声明一个 HandleScope 以便清理在范围内创建的任何本地句柄 我知道 HandleScope 将取消引用这些句柄以进行垃圾收集 但我感兴趣的是为什么每个 Local 类不像大多数内部 ref ptr 类型助手那样自行取消引
  • 什么是 Node.js? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ES2015 中的 switch 语句和作用域

    考虑此 ES2015 模块以及在节点 v4 4 5 中运行时的行为 use strict const outer 1 switch foo case bar const heyBar HEY BAR break case baz const
  • V8 中的栈和堆(JavaScript)

    V8 是否像 JVM 一样使用栈和堆 如果是这样 它会将原语放在堆栈上并将对象放在堆上吗 In V8 null undefined true and false内部是堆分配的对象 https github com v8 v8 blob c7
  • Google Apps Script V8 分配给 null 会取消调试

    将变量赋值为 null 会导致调试取消该行的执行 这是重现该问题的测试脚本 function myFunction var a Hallo Logger log a a var b null Logger log b b 调试时 此脚本执行
  • 如何在今天的 v8 中包含另一个 js 文件?

    我找到了一个旧的答案和后来的更新here https stackoverflow com questions 1149340 how do you include another js file in googles v8 但是我很难将此代
  • 用于测量 GC 活动的 V8 垃圾收集器回调

    我有一个关于V8的小问题6 7 240GC 行为和AddGCPrologueCallback AddGCEpilogueCallback回调 问题背后的一个小故事 我们使用 V8 引擎启动自定义 JS 代码 为了限制执行时间 我们有一个wa
  • Google Chrome 中 array.splice() 的时间复杂度是多少?

    如果我使用 splice 从数组中删除一个元素 如下所示 arr splice i 1 这会是O n 在最坏的情况下 因为它会移动 i 之后的所有元素 或者它是常数时间 下面有一些链表魔法 最坏的情况下should be O n 复制所有n
  • 如何在节点中转义 shell 命令的字符串?

    In nodejs http nodejs org 执行外部命令的唯一方法是通过 sys exec cmd 我想调用外部命令并通过标准输入为其提供数据 在nodejs中 似乎还没有一种方法可以打开命令 然后将数据推送到它 仅执行并接收其标准

随机推荐

  • Unity - 如何从不同的场景获取游戏对象?

    首先 我是一个初学者 所以对我要轻松一些 我正在尝试从另一个场景激活和停用游戏对象 游戏中的玩家 基本上 我试图通过停用当前玩家模型来更改游戏场景中的玩家 并在用户按下商店场景中的某个按钮时激活游戏场景中所需的玩家模型 但我无法访问游戏对象
  • 在已安装程序列表中显示发布者名称

    我使用 Wix Toolset v3 11 生成 msi我的 Windows 应用程序的安装程序 如何让发布者名称出现在我的申请条目中设置 gt 应用程序和功能 I noticed that some entries in that lis
  • dplyr 如何按组落后

    我有一个包含交货时间的订单和应收账款的数据框 我可以使用 dplyr 根据组提前时间填写接收栏吗 df lt data frame team c a a a a a b b b b b order c 2 4 3 5 6 7 8 5 4 5
  • 如何在 JSF 中防止双击

    我们有一些搜索页面需要运行大量数据 并且需要一段时间才能完成 当用户单击搜索按钮时 我们希望不允许他们再次提交搜索结果 在 JSF 中是否有进行 双击 检测 预防的最佳实践 PrimeFaces 组件似乎可以做我们想要的事情 因为它会在单击
  • Python请求响应403禁止

    所以我想抓取这个网站 https www auto24 ee我能够毫无问题地从中抓取数据 但今天它给了我 响应 403 我尝试使用代理 将更多信息传递给标头 但不幸的是似乎没有任何效果 我在互联网上找不到任何解决方案 我尝试了不同的方法 之
  • 构建 3D Pandas 数据框

    我在 Pandas 中构建 3D DataFrame 时遇到困难 我想要这样的东西 A B C start end start end start end 7 20 42 52 90 101 11 21 213 34 56 74 9 45
  • 将图像从 Firebase 下载到 Flutter

    有很多将文件上传到 firebase 并获取 downloadUrl 的示例 但我没有发现获取图像的 DownloadURL 并在 Flutter 小部件中使用它的示例 这是与上传文件相关的 final StorageReference r
  • 从 Java 字符串中删除 ✅、

    我有一些字符串 其中包含各种不同的表情符号 图像 符号 并非所有字符串都是英语 其中一些字符串是其他非拉丁语言 例如 railway Cats and dogs I m on Apples Vi sign I m the king Cor
  • Jenkins Pipeline - SVN 轮询

    我有一个 Jenkins 管道模板 它在 Subversion 中使用 Jenkins 文件 Jenkins文件有svn checkout方法来签出真实的应用程序 真实应用程序的svn url是从jenkins环境变量传递的 我需要对实际应
  • Cron 作业在特定时间启动和停止

    是否可以设置一个 cron 作业只在某些日子的晚上工作 例如每个月的第一天下午 3 点到晚上 9 点 我只想在晚上服务器负载较低时进行电子邮件营销活动 是否可以在某个时间运行一个 cron 作业并在某个时间停止它 您可以在晚上 9 点使用第
  • 如何在 Firebase 数据库中解压多层嵌套 JSON

    在我的应用程序中 我会定期有一个 JSON 主题 例如message 然后嵌套在其中是random ID 那么message文本作为随机 ID 内的字符串 但是 我需要破译多个级别的随机 ID 在 Firebase for Swift 中这
  • Cosmos DB 中是否支持使用 OData 进行分页?

    我可以看到通过 SQL API 访问 Azure 中的 Cosmos DB 时支持偏移 限制 但 OData 是否支持此功能 UPDATE 您可以下载my demo在github上 和本文 and 官方文件可以帮助你 我的存储帐户中的数据
  • 根据条件运行中间件 - Laravel

    我有一个中间件 用于检查请求中的特定标头参数并根据该参数发回响应 但我遇到的问题是我不希望这个中间件始终在我的控制器中的函数上运行 我希望如果函数中的条件为真 例如 存储函数 中间件就会运行 我怎样才能实现这个目标 在执行控制器操作之前调用
  • 向量化 seq 的优雅方法?

    尽管标题相似 但这不是同一个问题在 R 中向量化rep和seq 我的近期目标 给定一个向量 我想生成一个新向量 其中包含原始值以及旧值中每个值之间的规则间隔 这并不难 一种策略是使用更通用的函数 给定两个向量和一个指定的by间隔 使用相同的
  • git commit 的 --date 参数的格式是什么

    我需要覆盖 Git 的提交日期 所有文档都指向 date参数 但随后就留下了一个不知道适当格式的线索 我已经尝试了我能想到的所有排列 我得到 致命 日期格式无效 每一个的错误 Git 2 6 2015 年第 3 季度 添加了一个新选项 Se
  • jQuery 热键:防止 IE 运行自己的快捷方式,例如 Alt+H

    Using jQuery hotkeys I try to bind shortcuts like Alt H Alt C to some specific actions in my site The event propagation
  • 在python中,如何检查字符串是否同时包含大写和小写字母

    我看过另一个帖子 和我的问题类似 密码检查 Python 3 除了我的问题涉及检查密码是否同时包含大写和小写问题 我的代码如下 但是执行时它无法识别密码中的小写和大写字母 它只识别一种类型 我怎样才能让它识别这两种类型 还有一种更简单的方法
  • 推送通知后离子设置徽章

    我在用着IONIC框架 我想在收到推送通知后设置应用程序的徽章 当我的申请关闭时 有办法做到这一点吗 这是为其他遇到同样问题的人准备的 我相信您正在谈论使用从服务器收到的更新徽章编号使徽章可见 首先要在 Push 的 init 方法的代码中
  • 设置对话框列表中文本的样式

    我使用了这里给出的说明 http developer android com guide topics ui dialogs html AddingAList在对话框中创建列表 问题是我似乎没有找到将长文本包装在选项内的方法 请看下图 请告
  • V8如何管理对象实例的内存?

    http code google com apis v8 design html 上一页解释了 v8 团队用于实现快速属性访问的优化技术 但它的对象实例又如何呢 新属性可以随时添加到对象中 因此应该允许其大小增长 它是否只是简单地分配默认大