摘要:自動內存管理當你在使用時,實際上并不需要考慮內存。這種自動內存管理可以使開發人員更輕松。即使在手動內存管理的語言中,通常會從語言運行時獲得一些幫助。這就是為什么許多現代語言使用自動內存管理的原因避免人為錯誤。
原文地址:A crash course in memory management
原文作者:Lin Clark
譯者:黑黑
校對者:Bob
要理解為什么將 ArrayBuffer 和 SharedArrayBuffer 添加到 JavaScript 中,你需要了解一些關于內存管理的內容。
你可以將機器中的內存看作一堆盒子。就像你在辦公室里的郵箱,或是小孩子們使用的收納箱。
如果你想要為其他孩子留下一些東西,你可以把它放在一個盒子里。
在每個盒子旁邊都有一個數字,這些數字就是內存地址,用來告訴別人在哪里找到你留給他們的東西。
這些盒子中的每一個都具有相同的尺寸,并且可以容納一定量的信息。盒子的尺寸取決于機器。這個大小稱為字長。它通常是32位或64位。但是為了顯示方便,這里我們使用8位字長。
如果我們想把數字2放在其中一個盒子中,我們可以很容易地做到這一點。數字很容易轉換成二進制。
如果我們想要的東西不是數字怎么辦?比如字母 H?
我們需要一個類似UTF-8的編碼來用數字代替這些東西。而為了把這些東西轉換成數字,我們需要一個類似編碼器環的工具。之后我們就可以存儲它了。
當我們想把它從盒子里拿出來的時候,必須通過解碼器把它轉換回 H。
自動內存管理當你在使用 JavaScript 時,實際上并不需要考慮內存。內存被抽象出來,你不會直接接觸到它。
取而代之的是 JS 引擎充當中介,為你管理內存。
比如說有一段 JS 代碼用來創建一個變量(假設該 JS 代碼使用了 React)。
JS 引擎利用編碼器把該值轉換成二進制。
它將在內存中找到可以容納該二進制的空間,這個過程稱為分配內存。
然后,引擎將跟蹤該變量是否仍然可以從程序中的任何地方訪問。如果該變量無法再訪問,以便 JS 引擎可以在回收的內存中存放新的值。
這種在內存中監控變量(字符串、對象或其他類型)并釋放掉不再使用的變量所占用的內存的過程,稱為垃圾回收。
像 JavaScript 這樣不直接處理內存的語言被稱為內存管理語言。
這種自動內存管理可以使開發人員更輕松。但它也增加了一些開銷,而這種開銷有時會使性能不可預測。
手動內存管理和自動管理內存的語言相比,需要手動管理內存的語言有些不同。例如,我們來看看 React 如何使用 C 語言寫入內存(現在可以通過WebAssembly來實現)。
C 語言沒有 JavaScript 在內存上的抽象層。而是直接在內存上運行。你可以從內存加載東西,也可以將內容存儲到內存中。
當你將 C 語言或其他語言編譯到 WebAssembly 時,你使用的工具將在 WebAssembly 中添加一些輔助代碼。例如,它會添加用于編碼和解碼字節的代碼。這些代碼稱為運行環境。運行環境會處理一些本該 JS 引擎做的事情。
但是對于手動管理的語言,其運行時將不包括垃圾回收。
這并不意味著你完全要自己處理。即使在手動內存管理的語言中,通常會從語言運行時獲得一些幫助。例如,在 C 語言中,運行時會把哪些內存地址可用記錄在一張表中,這張表叫做空閑列表。
你可以使用函數 malloc (內存分配的簡寫)來申請一些可以容納數據的內存地址。這將把這些地址從空閑列表中拿走。當你處理完這些數據后,你須調用函數 free 釋放掉由 malloc 函數申請的內存。之后,這些地址將被添加回空閑列表。
你必須弄清楚何時調用這些函數。這就是為什么它被稱為手動內存管理——你得自己管理內存。
作為一名開發人員,弄清楚何時清除不同部分的內存可能很難。如果你在錯誤的時間進行操作,可能會出現bug,甚至導致安全漏洞。如果你不這樣做,你的內存就會耗盡。
這就是為什么許多現代語言使用自動內存管理的原因——避免人為錯誤。但這是以性能為代價的。 我將在下一篇文章中更多地解釋這一點。
iKcamp原創新書《移動Web前端高效開發實戰》已在亞馬遜、京東、當當開售。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/88553.html
摘要:順便一說,這首歌的原唱是秋田,中島當年嗓子壞了,才有這歌。中文是直接翻譯來的,作曲是秋田。一部電影春夏秋冬又一春春夏秋冬又一春是由金基德執導,金英民吳英秀金基德主演的一部韓國電影。年月日于韓國上映。 原鏈接: http://bluezhan.me/weekly/#/9-2 1、web前端 Angular vs. React vs. Vue: A 2017 comparison 9 S...
摘要:順便一說,這首歌的原唱是秋田,中島當年嗓子壞了,才有這歌。中文是直接翻譯來的,作曲是秋田。一部電影春夏秋冬又一春春夏秋冬又一春是由金基德執導,金英民吳英秀金基德主演的一部韓國電影。年月日于韓國上映。 原鏈接: http://bluezhan.me/weekly/#/9-2 1、web前端 Angular vs. React vs. Vue: A 2017 comparison 9 S...
摘要:前端日報精選開發常見問題集錦前端碼農的自我修養虛擬內部是如何工作的譯知乎專欄并不慢,只是你使用姿勢不對一份優化指南掘金老司機帶你秒懂內存管理第一部中文免費公開課前端面試的大關鍵點,你到了嗎知乎專欄高效開發與設計姐的圖片二三 2017-07-19 前端日報 精選 VueJS 開發常見問題集錦 - 前端碼農的自我修養 - SegmentFault虛擬 DOM 內部是如何工作的?[譯]Hig...
摘要:小白看過來讓爬蟲成為你的好幫手隨著信息化社會的到來,人們對網絡爬蟲這個詞已經不再陌生。互動活動關于華為云微認證的任何問題,均可在下方評論區留言。華為云微認證每期將送出個免費機會,獎項公布時間月日。 小白看過來 讓Python爬蟲成為你的好幫手 隨著信息化社會的到來,人們對網絡爬蟲這個詞已經不再陌生。但什么是爬蟲,如何利用爬蟲為自己服務,這聽起來有些高大上。下面一文帶你走近爬蟲世界,讓即...
閱讀 3532·2023-04-25 20:09
閱讀 3736·2022-06-28 19:00
閱讀 3056·2022-06-28 19:00
閱讀 3075·2022-06-28 19:00
閱讀 3168·2022-06-28 19:00
閱讀 2874·2022-06-28 19:00
閱讀 3038·2022-06-28 19:00
閱讀 2632·2022-06-28 19:00