JSON 树和内存分配
JSON Tree & Memory Allocation
在 JavaScript 中,如果我创建一个对象,我的理解是它本质上表示为 JSON,如果这个对象在其父对象上有一个句柄,而父对象在子对象上有一个句柄,它如何在内存中保存(它是一个指针吗? 或 JSON 的重复(。
例如,如果我构造一个 Person 对象,如下所示,其中每个 Person 可能有多个子对象,并且其父项上还有一个句柄。
var Person = function(json, parent) {
this.name = json.name;
this.parent = parent;
this.children = new Array();
if(json.children) {
for(var i=0; i < json.children.length; i++) {
this.children.push(new Person (json. children[i], this));
}
}
我的理解是,如果我更改一个人的属性,那么这将反映在 Person 中,但也反映在其任何子项的父级中,所以这将表明实际对象在内存中保存一次并且 JavaScript 使用指针? 我这样想对吗?
我担心这种类型的结构在内存中保存的成本很高,因为我可能会遇到这样的情况:我有几千个这种类型的分层结构,可以深入几级。
用于以纯文本格式表示 JavaScript 对象。
Javascript中的Javascript对象本身根本不是JSON。 它们是某种内部格式,取决于Javascript实现,并且是良好的运行时性能和有效大小之间的平衡。 当一个对象包含对 Javascript 中另一个对象的引用时,这不是该对象的副本。 您可以将其视为指向另一个对象的指针,并且它可能是实现内部的某种指针,但这取决于实现。 关键是它像指针一样工作。
一个简单的 Javascript 实验表明,当您将一个对象分配给多个变量时,只有一个数据副本(因此使用指向单个数据集的指针(:
var x = {counter: 2};
var y = x;
x.counter = 10;
console.log(x.counter); // 10
console.log(y.counter); // 10
JSON是在Javascript本身很久之后发明的,作为在不同进程或应用程序或计算机之间交换Javascript数据结构的一种手段。 从那时起,它已成为许多不同语言使用的通用数据交换结构,而不仅仅是Javascript。 您可以在此处阅读有关它的更多信息:http://www.json.org/。
- Javascript内存分配
- Javascript是否为具有未定义值的变量分配32位内存
- 使用模块模式时分配了多少内存
- JavaScript 中的堆和本机内存分配:如何管理
- 分配更多内存 Cucumber-js
- 节点为数组中的空值分配多少内存
- 事件处理程序分配和内存泄漏
- JSON 树和内存分配
- JavaScript 类型的内存分配
- 为阵列分配内存
- 是否可以加载图像,在内存中缩放它并将其分配为背景图像的 uri
- Javascript 类、编译器性能和新 Klass() 上的内存分配
- 画布路径内存分配
- 内存分配和DOM元素
- Chrome在使用单页应用程序时增加系统内存分配
- 致命错误:CALL_AND_RETRY_2分配失败-进程在预处理我的js字段时内存不足
- 删除缓存文件并以编程方式释放为其分配的内存
- 如何检测在JavaScript中触发垃圾收集的内存分配
- 是否可以在不分配内存的情况下存储值
- 如何在for(prop in obj)循环中分配内存,最好的方法是什么