gpt4 book ai didi

javascript - 垃圾收集是否使用给定代码从双向链表中删除已删除的项目?

转载 作者:行者123 更新时间:2023-11-30 13:46:44 26 4
gpt4 key购买 nike

我有一个双向链表,每个对象都有一个数据和一个指向下一个对象的指针和一个指向前一个对象的指针,如下所示:

obj1 <-> obj2 <-> obj3 <-> obj4 <->

我使用此代码删除 obj3obj4 :假设pobj2的数据

let b = head;
while(b.next!=null){
b=b.next
if(b.data === p){
b.next = null;}}

在这种删除方式中,指向obj3的指针丢失了所以obj3obj4不可访问但obj3有指向 obj2 的指针在obj3.previous

我的问题是:如果我使用这段代码删除 obj3obj4垃圾收集会删除 obj3obj4从内存?如果是,它如何理解 obj3不可访问(它会遍历链表吗?如果是,操作将花费 O(n) 的时间吗?)。了解 javascript 垃圾收集会减慢运行时速度对我来说很重要。(列表很长,需要一些时间来迭代)

最佳答案

有多种垃圾收集策略可以很好地处理循环引用,其中之一是 'mark and sweep' .现代引擎使用这些策略。 V8 for example does so too .

if I use this code to remove obj 3 and obj 4 will garbage collection remove obj3 and 4 from the memory?

可以。它是否真的在很大程度上取决于垃圾收集器的工作方式。

and if yes how does it undrestand that obj 3 is not accessible ?

如果它使用标记和清除,它将遵循所有变量的所有引用并标记所有对象。然后它将遍历堆并清除所有未标记的对象。

will the operation take time of O(n) ?

是的。您使用的内存越多,垃圾收集器要做的工作就越多。

because i am writing a code and its important to me that how much will javascript garbage collection slow down the code runtime

那么如何...实际检查您的代码有多快以及垃圾收集获得了多少时间?

关于javascript - 垃圾收集是否使用给定代码从双向链表中删除已删除的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59161999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com