国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - 編程技術(shù) - 通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

2022-01-10 22:52神光的編程秘籍神說(shuō)要有光zxg 編程技術(shù)

Chrome Devtools 提供了 Memory 工具用于分析內(nèi)存,包括 Snapshot、TimeLine、Sample 三種工具。

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

JS 的字符串是怎么分配內(nèi)存的?

可能大家都知道,字符串存在字符串常量池中,被?;蚨焉系淖兞恳?。如果變量的值是字符串字面量,則在棧上的變量直接引用字符串常量池中的字符串;如果是字符串是 new String 創(chuàng)建的,則會(huì)在堆上創(chuàng)建 String 對(duì)象,指向字符串常量池中的字符串,棧上變量指向堆中的 String 對(duì)象。

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

這個(gè)結(jié)論是對(duì)的么?

今天我們用 Chrome Devtools 的 Memory 工具證明下:

Memory 工具證明 String 的內(nèi)存分配方式

我們準(zhǔn)備這樣一段代碼:

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3. <head> 
  4.     <meta charset="UTF-8"
  5. </head> 
  6. <body> 
  7.  
  8.     <script> 
  9.         const arr = []; 
  10.         setTimeout(() => { 
  11.             for(let  i = 0;i< 10000;i++) { 
  12.                 arr.push('guang'); 
  13.             } 
  14.         }, 3000); 
  15.  
  16.         const arr2 = []; 
  17.         setTimeout(() => { 
  18.             for(let  i = 0;i< 10000;i++) { 
  19.                 arr2.push(new String('guang')); 
  20.             } 
  21.         }, 5000); 
  22.     </script> 
  23. </body> 
  24. </html> 

3s 的時(shí)候創(chuàng)建了一個(gè) 10000 個(gè)元素的數(shù)組 arr,數(shù)組元素是字符串常量 "guang"。

5s 的時(shí)候創(chuàng)建了一個(gè) 10000 個(gè)元素的數(shù)組 arr2,數(shù)組元素是 new String("guang")。

按照理論來(lái)說(shuō),arr 中的元素是直接引用字符串常量池的字符串,arr2 中的則是引用堆上的 String 對(duì)象,String 對(duì)象再引用字符串常量池的字符串。

我們用 Memory 工具來(lái)驗(yàn)證下。

Chrome Devtools 提供了 Memory 工具用于分析內(nèi)存中的對(duì)象:

一共有三種內(nèi)存分析工具:

  • Snapshot:某個(gè)時(shí)間點(diǎn)的堆內(nèi)存快照
  • TimeLine:實(shí)時(shí)的按照時(shí)間線顯示的內(nèi)存分配情況
  • Sampling:采樣的方式收集內(nèi)存分配情況

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

我們想要看到按照時(shí)間線的實(shí)時(shí)分配情況,所以用第二種工具:TimeLine。

加載頁(yè)面,點(diǎn)擊錄制,右邊就會(huì)實(shí)時(shí)展示內(nèi)存分配情況:

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

我們錄到 6s 點(diǎn)擊停止。

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

可以看到有兩條豎線,分別代表了兩次內(nèi)存分配。

點(diǎn)擊第一次內(nèi)存分配,可以看到詳情:

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

可以看到,這個(gè)時(shí)間點(diǎn)創(chuàng)建了 string 和 array 兩種對(duì)象:

"guang" 這個(gè) string 的內(nèi)存地址是 @169541。

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

Array 的元素指向的也都是 @169541

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

這就驗(yàn)證了字符串常量池的存在,以及字符串字面量直接指向常量池中的字符串。

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

再來(lái)看下第二種內(nèi)存分配方式:

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

可以看到,創(chuàng)建了 String 的對(duì)象、array 變量(system 是 JS 引擎內(nèi)部分配的一些對(duì)象,不用關(guān)心):

String 對(duì)象引用了字符串常量池中的 @169541 的字符串 "guang"

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

而 Array 中的元素則是指向了不同的 String 對(duì)象的地址:

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

這再一次驗(yàn)證了字符串常量池的存在,以及 String 對(duì)象是在堆上分配內(nèi)存,然后指向字符串常量池的字符串。

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

證明完畢,確實(shí)如前面的結(jié)論所說(shuō):字符串存儲(chǔ)在字符串常量池中,字符串字面量直接指向常量池的字符串地址,String 對(duì)象會(huì)先在堆上分配空間,然后指向字符串常量池的字符串地址。

我們從始至終只創(chuàng)建了一次 "guang" 這個(gè)字符串,字符串常量池的好處顯而易見(jiàn)了:

而且,還可以得出一個(gè)結(jié)論,創(chuàng)建 String 對(duì)象的方式內(nèi)存開(kāi)銷大很多,建議用字符串字面量的方式:

通過(guò) Chrome Devtools 的 Memory 工具證明 string 的內(nèi)存分配方式

從圖中可以直觀的對(duì)比出兩種方式的占用內(nèi)存的差別。

文中的測(cè)試代碼上傳到了 github: https://github.com/QuarkGluonPlasma/chrome-devtools-exercise

總結(jié)

Chrome Devtools 提供了 Memory 工具用于分析內(nèi)存,包括 Snapshot、TimeLine、Sample 三種工具,我們用其中的 TimeLine 工具實(shí)時(shí)分析了字符串的內(nèi)存分配,證明了字符串常量池的存在,以及字符串字面量、new String 兩種創(chuàng)建字符串方式的內(nèi)存上的差別。

建議盡量用字符串字面量,少用 new String 的方式創(chuàng)建字符串,在占據(jù)的內(nèi)存大小上還是有差距的。

證明過(guò)程中,我們也可以直觀的感受到字符串常量池的巨大好處。

原文鏈接:https://mp.weixin.qq.com/s/VucSMXz8tnNf_LyrXZLHsg

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲美腿 欧美 激情 另类 | 精品国产欧美一区二区三区成人 | 成人国产精品免费观看 | 亚洲免费成人 | 午夜国产在线 | 色成人免费网站 | av资源在线 | 国产老头老太作爱视频 | 国产丝袜一区 | 看黄色片网站 | 97精品视频| 精品一区在线视频 | 成年无码av片在线 | 69久久久| 在线免费黄 | 国产视频三区 | 成人国产精品一级毛片视频 | 中文字幕av网| 日韩中文字幕一区二区 | 精品久久99 | 伊人久久精品久久亚洲一区 | 久久久久久高清 | 日韩中文字幕在线视频 | 欧美精品一区二 | 国产精品久久久爽爽爽麻豆色哟哟 | 免费在线看a | 欧美精品乱码久久久久久按摩 | 欧美日韩中文字幕 | 日韩精品在线视频观看 | 精品国产欧美 | 国产精品久久综合 | 综合网av| 天天看天天操 | 国产在线精品一区二区三区 | 日韩精品在线观看中文字幕 | 久久精品国产免费 | 日日摸夜夜添夜夜添特色大片 | 欧美在线a | 日日嗨av一区二区三区四区 | 99精品视频一区二区三区 | 亚洲国产精品一区在线 |