Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 相同的chrome对象ID是否意味着堆探查器中存在相同的对象?_Javascript_Google Chrome_Profiling_Heap_Heap Profiling - Fatal编程技术网

Javascript 相同的chrome对象ID是否意味着堆探查器中存在相同的对象?

Javascript 相同的chrome对象ID是否意味着堆探查器中存在相同的对象?,javascript,google-chrome,profiling,heap,heap-profiling,Javascript,Google Chrome,Profiling,Heap,Heap Profiling,我正在使用我们的一个网络应用解决内存问题。我正在使用Chrome的堆分析器。我想确保我非常明确地理解了一些东西,因为我正在对这些信息进行假设 上面堆配置文件屏幕截图中的@符号。我想确保我完全明白:相等的对象ID意味着相同的对象 a、 objectId==b。objectId表示与b相同的 a、 objectId==b.objectId表示与b不相同 因此,如果我有两个我期望实际上是同一事物的对象,但它们的对象id不同,这意味着发生了意外的复制?这意味着我可以在我的代码中找出我可能在哪里创建

我正在使用我们的一个网络应用解决内存问题。我正在使用Chrome的堆分析器。我想确保我非常明确地理解了一些东西,因为我正在对这些信息进行假设

上面堆配置文件屏幕截图中的
@
符号。我想确保我完全明白:相等的对象ID意味着相同的对象


a、 objectId==b。objectId表示与b相同的
a、 objectId==b.objectId表示与b不相同

因此,如果我有两个我期望实际上是同一事物的对象,但它们的对象id不同,这意味着发生了意外的复制?这意味着我可以在我的代码中找出我可能在哪里创建不必要的重复

似乎是这样说的,但他们没有明确地说出来,接着说为什么他们有一个对象id,而不是它代表什么

这是一个对象ID。显示对象的地址毫无意义,因为对象在垃圾收集期间会移动。这些对象ID是真实的ID——也就是说,它们在拍摄的多个快照中保持不变,并且是唯一的。这允许在堆状态之间进行精确比较。维护这些ID会增加GC周期的开销,但只有在第一个堆快照拍摄完成后才会启动—如果不使用堆配置文件,则不会增加开销


我明白了。但是我需要把它重新放回我的C程序员的头脑中。我意识到,即使使用本机堆,指针值也会随时间而变化。我能有效地将对象id视为随着时间推移而唯一的指针地址吗?

因此我在Chrome中运行了一些测试代码,答案似乎是肯定的,相同的对象id意味着相同的对象。如果对象id不同,则表示一个副本或不同的对象

我分析了以下代码片段,可以在下面的示例中找到:

堆探查器确认两个引用共享对象id,副本接收新的对象id


简言之,这和我预期的一样。对同一对象的多个引用接收相同的对象id。副本引用不同的对象并接收不同的对象id。

因此我在Chrome中运行了一些测试代码,答案似乎是肯定的,相同的对象id意味着相同的对象。如果对象id不同,则表示一个副本或不同的对象

我分析了以下代码片段,可以在下面的示例中找到:

堆探查器确认两个引用共享对象id,副本接收新的对象id

简言之,这和我预期的一样。对同一对象的多个引用接收相同的对象id。副本引用不同的对象并接收不同的对象id

(function heapTest(doc) {
  'use strict';

  function clone(obj) {
    return JSON.parse(JSON.stringify(obj));
  }

  var b = {'grandchild-key-2': 5};
  var a = {'child-key-1': b};
  doc.child1 = a;
  doc.child1_again = a;

  doc.child1_copy = clone(a);

})(document);