javascript - JS 字符串/数字和垃圾回收

标签 javascript string garbage-collection

tl;dr

下面的代码行是否创建了一个对象(如 JavaScript String 对象或 JavaScript Number 对象)来组合字符串基元和数字?

var scouterSays = "powerlvl" + 9001;

完整问题

我正在用 JavaScript 编写一个游戏引擎,并试图非常小心地处理垃圾回收。我已经通读了 http://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascripthttp://buildnewgames.com/garbage-collector-friendly-code/这非常有帮助。我已经实现了对象池,并尽可能避免数组操作以支持链表。

现在如果我理解正确的话,如果我在原始字符串上调用字符串方法,将创建一个字符串对象并替换我的原始字符串。示例有长度、子字符串、indexOf 等。由于我使用字符串来标识带有对象池的对象类型,因此我担心每次从池中提取对象时都会产生垃圾。

简而言之,以下是否会导致创建对象(如 JavaScript String 对象或 JavaScript Number 对象)?

var byteSize = 4;
var objectType = "msg" + byteSize; //does this create a JS String/Number object?
var message = gameengine.pool.acquire(objectType);

还有一个相关的问题,使用按位运算(如 ~~() 或 << 或 >>)是否也会导致创建 JavaScript 对象?

最佳答案

我对 JavaScript GC 的信任度为零,这是我远离这种语言的基本原因。不管怎样,我的回答是:

var x = 1;
alert(typeof x); //number

var n = new Number(1);
alert(typeof n); //object

var scouterSays = "powerlvl" + 9001;
alert(typeof scouterSays); //string

var txt = new String("string");
alert(typeof txt); //object

var test1 = new Boolean(true);
var test2 = String(test1); //convert object to string
alert(typeof test2); //string

关于javascript - JS 字符串/数字和垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15179103/

相关文章:

python - 在 python 中将 numpy ndarray 转换为字符串的更智能、更快速的方法

string - 使用包含引号的字符串编写代码的更易读的方式 `"`

c# - C# 弱引用实际上是软引用吗?

java - 原型(prototype) Bean 销毁

javascript - 如何获取 id 包含特殊字符的输入元素的值?

javascript - 从字符串中删除字符串,其中字符串的一部分可以是javascript中的数字

javascript - 如何将 $(document).ready() 重新应用于通过 AJAX 加载的部分 HTML?

string - Shell 脚本 - 从变量中删除第一个和最后一个引号 (")

garbage-collection - JNI 代码即与垃圾收集并发执行。

javascript - 为什么 Meteor 对这个 IronRouter 代码感到暴躁?