如何在后台存储Node JS Buffer数据
How is Node JS Buffer data stored behind the scenes?
根据Node JS Buffer文档," Buffer类似于整数数组,但对应于V8堆之外的原始内存分配"。没有给出进一步的信息。
问题是数据如何存储在RAM中。节点JS缓冲区是否使用一种特殊的方式来分配堆上的空间?这是否受到与V8的堆相同的垃圾收集?我是否可以安全地假设,对缓冲区中数据的任何更改实际上都会更改RAM中的数据,并且不会为窥探者留下残留的数据?
很抱歉,这个问题很宽泛,但我似乎找不到任何关于这实际上是如何工作的材料。我问这个问题的原因是因为我想确保我在应用程序中使用的变量不会在内存中停留的时间超过它们需要的时间。
文档:https://nodejs.org/api/buffer.html buffer_class_buffer
干杯!
nodejs实现缓冲区的源代码是http://github.com/joyent/node/blob/master/lib/buffer.js和http://github.com/joyent/node/blob/master/src/node_buffer.cc。如果你真的想知道它是如何工作的细节,你可以研究实际的代码。
关于你的问题……
问题是数据如何存储在RAM中。节点JS缓冲吗使用一种特殊的方式在堆上分配空间?
根据源代码,在分配给缓冲对象的内存中涉及堆分配和内存池。当每一个被使用取决于如何使用的细节。
是否受到与V8的堆相同的垃圾收集?
是的,垃圾收集对Buffer对象有效。使用本机代码实现的对象如果在实现中遵循一组严格的规则,则有可能参与垃圾收集。
我可以安全地假设对缓冲区中数据的任何更改实际上更改RAM中的数据,并且没有数据的残余留给偷窥者?
是的,当你改变缓冲区中的数据时,它实际上改变了RAM中的数据(除了RAM之外没有其他地方存储更改,除非它只存储在磁盘上,而不是这种情况)。
至于"没有数据残留给偷窥者",那就很难说了。在编程中,当堆元素或池元素增长或缩小时,它们的数据可能被复制到另一块RAM中,而旧的、现在释放或回收的RAM块可能仍然具有部分或全部原始数据的副本,这是非常常见的。除非特别清除,否则新分配的RAM很可能之前已经用于其他用途,并且可能仍然包含以前使用的信息。
另一方面,写入Buffer对象直接写入分配/分配给该Buffer对象的RAM(只要你不导致它的大小改变),所以如果你想减少你的数据将留在RAM中的几率,你可以覆盖你的Buffer对象中的数据当你完成它。
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- Node.js's Buffer.writeFloatBE in Javascript
- 对Buffer如何在node.js中编码base64感到困惑
- buffer.js:246”;对象1没有方法'至小写'
- 如何在Processing.js上绘制图像时使用Z-Buffer
- 奇怪的Node.js Buffer.toString()行为
- 在Node.js中解析Buffer中的multipart/form-data
- 如何避免第一个参数必须是字符串或Buffer节点js
- 如何在后台存储Node JS Buffer数据
- Change node.js Buffer(BASE64) to jQuery