当前位置: 首页 > 面试题库 >

什么是JavaScript垃圾回收?

华永新
2023-03-14
问题内容

什么是JavaScript垃圾回收?为了编写更好的代码,对于Web程序员来说,了解JavaScript垃圾回收有什么重要意义?


问题答案:

从该页面引用:

JScript使用了非世代的标记清除垃圾收集器。它是这样的:

  • 每个“范围内”的变量都称为“清除剂”。清道夫可以指数字,对象,字符串等。我们维护一个清道夫列表-
    变量进入作用域时将移入scav列表,超出范围时将其移出scav列表。

  • 垃圾收集器不时地运行。首先,它在每个对象,变量,字符串等(GC跟踪的所有内存)上都打上“标记”。(JScript在内部使用VARIANT数据结构,并且该结构中有许多额外的未使用位,因此我们只设置其中一个即可。)

*其次,它清除了清除剂上的标记以及清除剂引用的可传递性关闭。因此,如果清除剂对象引用了非清除剂对象,则我们清除非清除剂及其所引用的所有内容上的位。(我使用“关闭”一词的含义与我以前的帖子中的含义不同。)

  • 至此,我们知道所有仍被标记的内存是分配的内存,任何作用域内变量的任何路径都无法访问该内存。指示所有这些对象将其自身拆除,这会破坏任何循环引用。

垃圾回收的主要目的是使程序员 不必 担心他们创建和使用的对象的内存管理,尽管当然有时并不能避免这种情况-
至少对垃圾回收的工作原理有个大概的了解总是有益的。

历史记录:
较早版本的答案对delete操作员的引用不正确。在JavaScript中,delete运算符从object移除属性,并且与deleteC / C ++ 完全不同。



 类似资料:
  • 垃圾回收 我们对生产中花了很多时间来调整垃圾回收。垃圾回收的关注点与Java大致相似,尽管一些惯用的Scala代码比起惯用的Java代码会容易产生更多(短暂的)垃圾——函数式风格的副产品。Hotspot的分代垃圾收集通常使这不成问题,因为短暂的(short-lived)垃圾在大多情形下会被有效的释放掉。 在谈GC调优话题前,先看看这个Attila的报告,它阐述了我们在GC方面的一些经验。 Scal

  • 对于开发者来说,JavaScript 的内存管理是自动的、无形的。我们创建的原始值、对象、函数……这一切都会占用内存。 当我们不再需要某个东西时会发生什么?JavaScript 引擎如何发现它并清理它? 可达性(Reachability) JavaScript 中主要的内存管理概念是 可达性。 简而言之,“可达”值是那些以某种方式可访问或可用的值。它们一定是存储在内存中的。 这里列出固有的可达值的

  • 垃圾收集,引用计数,显式分配 和所有的现代语言一样,OCaml提供垃圾收集器,所以你不用像C/C++一样显式地分配和释放内存。 JWZ在他的文章 "Java sucks" rant(Java蛋疼(怒)!): 第一个好家伙是Java没有 free()。其他的都没有所谓了。这几乎掩盖了所有的缺点,不管有多糟糕, 这个有点让后续文档基本都没有意义了,但是...(译注:但是啥大家自己看吧) OCaml的垃

  • 简介 在本篇文章呢,我来介绍一下JavaScript中的垃圾回收的垃圾回收 JavaScript中的垃圾 来看一下在JavaScript中什么样的内容会被当做是垃圾,在我们后续的GC算法当中, 也会存在了一个垃圾的概念,两者的其实是完全一样的,所以在这里说明首先对于我们前端开发来说的。 JavaScript中内存管理是自动的,每当创建一个数组、对象或者函数的时候呢, 它就会自动的去分配相应

  • 问题内容: 我想知道触发Java完整垃圾收集的确切情况是什么。 显而易见的是: 用完了老一代 用完了perm gen 调用System.gc() 那么其他导致全gc的情况又如何呢?尤其: Survivor Space中的可用空间不足,无法从Eden复制对象。 次要收藏集无法应付新对象的分配率(虽然不知道如何)。 我正在运行Sun Java 1.6,并将Concurrent Mark-Sweep和P

  • 问题内容: 我们打开了详细的GC日志记录来跟踪已知的内存泄漏,并在日志中获得以下条目: 我理解其中的第一个和第三个,但是“ GC–”是什么意思? 问题答案: 我在gc输出中得到了以下几行: 我读了Yishai的回答,这很有意义,但是当JVM在GC日志中打印“-”时,我想在Java GC源代码中亲自查看它,以及为什么。 据我所知,Young Gen的“ Parallel Scavenge”是一个停滞