发布日期:2023-10-30 04:23 点击次数:189
JS 的字符串是何如分拨内存的?
可能公共皆知谈,字符串存在字符串常量池中,被栈或堆上的变量援用。要是变量的值是字符串字面量,则在栈上的变量平直援用字符串常量池中的字符串;要是是字符串是 new String 创建的,则会在堆上创建 String 对象,指向字符串常量池中的字符串,栈上变量指向堆中的 String 对象。
这个论断是对的么?
今天咱们用 Chrome Devtools 的 Memory 器具诠释注解下:
Memory 器具诠释注解 String 的内存分拨面容咱们准备这么一段代码:
<!DOCTYPE 重庆时时彩电子游戏html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <script> const arr = []; setTimeout(() => { for(let i = 0;i< 10000;i++) { arr.push('guang'); } }, 3000); const arr2 = []; setTimeout(() => { for(let i = 0;i< 10000;i++) { arr2.push(new String('guang')); } }, 5000); </script> </body> </html>
3s 的时候创建了一个 10000 个元素的数组 arr,数组元素是字符串常量 "guang"。
5s 的时候创建了一个 10000 个元素的数组 arr2,数组元素是 new String("guang")。
按照表面来说,arr 中的元素是平直援用字符串常量池的字符串,arr2 中的则是援用堆上的 String 对象,String 对象再援用字符串常量池的字符串。
当我们谈到博彩,我们不仅仅是在谈论胜负的结果,更是在追求更高的精神层面。当我们看到XXX在比赛中拼尽全力,我们感受到的不仅仅是他的实力和技巧,更是他的毅力和勇气,这些都是博彩所代表的信念和精神。咱们用 Memory 器具来考证下。
太平洋在线注册Chrome Devtools 提供了 Memory 器具用于分析内存中的对象:
乐鱼体育一共有三种内存分析器具:
Snapshot:某个手艺点的堆内存快照 TimeLine:及时的按照手艺线透露的内存分拨情况 Sampling:采样的面容汇注内存分拨情况咱们念念要看到按照手艺线的及时刻拨情况,是以用第二种器具:TimeLine。
皇冠客服飞机:@seo3687加载页面,点击录制,右边就会及时展示内存分拨情况:
咱们录到 6s 点击住手。
不错看到有两条竖线,分辩代表了两次内存分拨。
点击第一次内存分拨,不错看到笃定:
不错看到,这个手艺点创建了 string 和 array 两种对象:
"guang" 这个 string 的内存地址是 @169541。
博彩平台注册送红包Array 的元素指向的也皆是 @169541
这就考证了字符串常量池的存在,以及字符串字面量平直指向常量池中的字符串。
再来看下等二种内存分拨面容:
不错看到,创建了 String 的对象、array 变量(system 是 JS 引擎里面分拨的一些对象,无须心思):
String 对象援用了字符串常量池中的 @169541 的字符串 "guang"
合法化而 Array 中的元素则是指向了不同的 String 对象的地址:
这再一次考证了字符串常量池的存在,以及 String 对象是在堆上分拨内存,欧博会员网站然后指向字符串常量池的字符串。
会议指出,习近平总书记在二十届中央国家安全委员会第一次会议上的重要讲话,从推进强国建设、民族复兴的战略高度,深刻阐述了事关国家安全的一系列重大理论和实践问题,为做好当前和今后一个时期国家安全工作提供了方向指引和行动指南。全市各地各部门要站在坚定拥护“两个确立”、坚决做到“两个维护”的高度,深入学习领会习近平总书记重要讲话精神,并将其列入即将开展的主题教育重要学习内容,完整准确全面贯彻总体国家安全观,树牢底线思维、极限思维,更好统筹发展和安全,确保我市国家安全工作始终沿着习近平总书记指引的方向前进。
赌博网上娱乐平台注册皇冠体育投注诠释注解达成,如实如前边的论断所说:字符串存储在字符串常量池中,字符串字面量平直指向常量池的字符串地址,String 对象会先在堆上分拨空间,然后指向字符串常量池的字符串地址。
咱们从始至终只创建了一次 "guang" 这个字符串,字符串常量池的公正了然于目了:
何况,还不错得出一个论断,创建 String 对象的面容内存支出大好多,提议用字符串字面量的面容:
体育皇冠在哪下载从图中不错直不雅的对比出两种面容的占用内存的离别。
文中的测试代码上传到了 github: https://github.com/QuarkGluonPlasma/chrome-devtools-exercise
追念Chrome Devtools 提供了 Memory 器具用于分析内存,包括 Snapshot、TimeLine、Sample 三种器具,咱们用其中的 TimeLine 器具及时刻析了字符串的内存分拨,诠释注解了字符串常量池的存在,以及字符串字面量、new String 两种创建字符串面容的内存上的离别。
提议尽量用字符串字面量,少用 new String 的面容创建字符串,在占据的内存大小上也曾有差距的。
诠释注解经过中,咱们也不错直不雅的感受到字符串常量池的盛大公正。