我有一个大的jsonMap,大约有100万个对象,每个对象有大约200个键值对。正如你所看到的,这里的键是重复的,每个键意味着一个新的String对象。有没有其他方法可以让所有重复的键都指向同一个String对象,以减少map的内存大小。根据上述统计数据,浏览器的内存将超过1Gb。
yx2lnoni1#
正如你所看到的,这里的键是重复的,每个键意味着一个新的String对象。好吧,不,它们每个都得到一个字符串 primitive。虽然有细微的区别,但JavaScript两者都有:
var sp = "primitive"; var so = new String("object");
字符串在JavaScript中有字符串池的概念吗?不是指您可以有意调用的任何外部内容,例如Java的intern。一个给定的JavaScript引擎(V8,SpiderMonkey等)可能会也可能不会在封面下重用字符串原语作为优化;它可以,因为字符串在JavaScript中是不可变的,但是它是否曾经成为开发优先级列表的顶部。
intern
7lrncoxx2#
JavaScript的工作原理与Java类似。它也有一个字符串池。当有两个相等的字符串时,只分配一个内存槽。没有新的对象被创建。这被称为Interning。How JavaScript stores strings
2条答案
按热度按时间yx2lnoni1#
正如你所看到的,这里的键是重复的,每个键意味着一个新的String对象。
好吧,不,它们每个都得到一个字符串 primitive。虽然有细微的区别,但JavaScript两者都有:
字符串
在JavaScript中有字符串池的概念吗?
不是指您可以有意调用的任何外部内容,例如Java的
intern
。一个给定的JavaScript引擎(V8,SpiderMonkey等)可能会也可能不会在封面下重用字符串原语作为优化;它可以,因为字符串在JavaScript中是不可变的,但是它是否曾经成为开发优先级列表的顶部。
7lrncoxx2#
JavaScript的工作原理与Java类似。它也有一个字符串池。当有两个相等的字符串时,只分配一个内存槽。没有新的对象被创建。这被称为Interning。
How JavaScript stores strings