1. 程式人生 > >Javascript(typescript)中的記憶體管理的個人理解

Javascript(typescript)中的記憶體管理的個人理解

JavaScript中基礎的回收機制是引用計數的方式,也是其他很多語言或者遊戲引擎中使用的一種基礎的垃圾回收機制,(比如cocos2dx中基礎型別object就是使用引用計數的方式,每一幀開始時候會把上一幀的所有東西遍歷,如果有引用計數為0的,就直接銷燬了,在當前幀的時候,如果手動進行釋放(如delete),reference變成0了,就直接銷燬物件。)(比如egret中也是使用的引用計數的方式)
從chrome profiler除錯可以看出,有一個gc根,如果某個東西從gc根遍歷無法遍歷到的話,就會被銷燬掉。也就是沒有從gc根的引用可以找到它。

而引用計數的方式不可避免的就是互相引用的問題。既一個東西引用了另一個東西,而它又引用了第一個,兩個的引用計數都增加了,導致引用計數互相持有一個,無法釋放,典型的就是js中的閉包(許多網上提到的,其實所有互相引用的道理都一樣,比如物件中的成員變數引用一個東西,但是那個東西沒被釋放一樣)。
下面一個沒被釋放,一個被釋放

function test() {
    let param1 = new Obj() ;
    param1.OnTouch = function () {
       let shit = param1.shit;
       return shit ;
    }
}
function test() {
    let param1 = new Obj() ;
    let p1 = param1.shit;
    param1.OnTouch = function () {
       let shit = 1;
       return shit ;
    }
}

還有其他人寫的更加具體的認知

相關推薦

Javascript(typescript)記憶體管理個人理解

JavaScript中基礎的回收機制是引用計數的方式,也是其他很多語言或者遊戲引擎中使用的一種基礎的垃圾回收機制,(比如cocos2dx中基礎型別object就是使用引用計數的方式,每一幀開始時候會把上一幀的所有東西遍歷,如果有引用計數為0的,就直接銷燬了,在當

Lua記憶體管理和釋放的理解

Lua記憶體是自動收集的, 這點跟Java類似, 不被任何物件或全域性變數引用的資料,將被首先標記為回收,不需要開發者做任何事情.但是,正如Java也會有記憶體洩露一樣, Lua也會有, 只不過,跟C++的不同,它是由於程式碼執行所裝載的資源,並沒有被徹底銷燬而導致,其中,最臭名昭著的就是不

對iOS開發記憶體管理的一點總結與理解

做iOS開發也已經有兩年的時間,覺得有必要沉下心去整理一些東西了,特別是一些基礎的東西,雖然現在有ARC這種東西,但是我一直也沒有去用過,個人覺得對記憶體操作的理解是衡量一個程式設計師成熟與否的一個標準。好了,閒話不說,下面進入正題。 眾所周知,ObjectiveC的記憶體

java記憶體洩漏的理解

JAVA記憶體機制及記憶體洩露   一、Java記憶體管理機制     在C++語言中,如果需要動態分配一塊記憶體,程式設計師需要負責這塊記憶體的整個生命週期。從申請分配、到使用、再到最後的釋放。這樣的過程非常靈活,但是卻十分繁瑣,程式設計師很容易由於疏忽而

非同步與分散式在爬蟲的應用(個人理解)

非同步: 是一個非阻塞的執行模式,就是在執行主程式的時候,如果其中有了耗時操作,程式不會在這操作進行停留,而會繼續執行下面的程式碼 拓展:     其中普及一下:常見的阻塞形式有:網路I/O操作,磁碟的I/O操作,使用者輸入時候的阻塞.    &n

JavaScript如何工作:記憶體管理+如何處理4個常見的記憶體洩漏

摘要: 作者將自己常用的JavaScript模組分享給大家。 原文:JavaScript如何工作:記憶體管理+如何處理4個常見的記憶體洩漏 Fundebug經授權轉載,版權歸原作者所有。 本系列的第一篇文章簡單介紹了引擎、執行時間和堆疊的呼叫。第二篇文章研究了谷歌V

堆,棧,字串池,以及程序,執行緒淺談記憶體個人理解

程序:一個服務的執行至少一個程序的開啟。程序就是程式的一次執行,功能的一次跑動。說簡單點好比點選跳轉,就是開啟一個程序。 執行緒:執行緒是程序的實體,簡單點說,執行緒就是分配空間(堆,棧),整合記憶體空間,處理資料交換。 一個程序可以擁有多個執行緒,多個執行緒之間可同時,協同執行。   堆:

關於馬爾科夫隨機場(MRF)在影象分割應用的個人理解

首先明確幾個基本概念(個人理解): 先驗概率: 基於歷史經驗得到的當前事件發生的概率 後驗概率: 根據資料或證據得到的事件發生的概率 (由因到果) 似然概率: 已知事件發生的概率下資料或證據發生的概率 (由果到因) 影象分割和目標識別都可以看成一個影象中各個畫素點做l

深入理解C++的new/delete和malloc/free動態記憶體管理

# malloc/free和new/delete的區別 - malloc/free是C/C++標準庫的函式;new/delete是C++操作符。 - malloc/free只是動態分配記憶體空間/釋放空間;new/delete除了分配空間還會呼叫建構函式和解構函式進行初始化與清理資源。 - malloc/fr

javascript記憶體管理

[toc] javascript中的記憶體管理 # 簡介 在c語言中,我們需要手動分配和釋放物件的記憶體,但是在java中,所有的記憶體管理都交給了java虛擬機器,程式設計師不需要在手動程序記憶體的分配和釋放,大大的減少了程式編寫的難度。 同樣的,在javascript中,記憶體管理也是自動進行的,

對於JavaScriptthis關鍵字的理解

決定 博客 rip script 答案 搜索 http 環境 return   這是我第二遍學this了,第一遍學的懵懵的。this指哪裏都是憑我一個男人的直覺然後控制臺輸出看看對不對。   剛查了書、博客、視頻。理解差不多了。畢竟菜雞me; 一、首先介紹下什麽是this

javascriptcall()方法的理解

創建 scrip 補充 call() 函數對象 指定 指針 com fin call ( thisObj [, arg1 [, arg2 [, [, argN] ] ] ]) call()方法:官方介紹是,調用一個對象的一個方法,以另一個對象替換當前對象。      ca

spring面向切面編程(AOP)的個人理解

.com throw logs ima 正則表達式 正則 ring 菜刀 整合 面向切面編程AOP,是spring的一大特點 Aspect切面:封裝共性功能的(增強功能的)類 Advice通過:切面類中封裝的增強功能的方法。 PointCut:切入點,是一個集合的概念,

圖說js的this——深入理解javascriptthis指針

前端 javascript this沒搞錯吧!js寫了那麽多年,this還是會搞錯!沒搞錯,javascript就是回搞錯!…………在寫java的時候,this用錯了,idea都會直接報錯!比如……但是,js,……idea,愛莫能助了……在面向對象編程裏有兩個重要的概念:一個是類,一個是實例化的對象,類是一個

restframework框架寫api個人理解以及碰到的問題

bject itl null 索引 路徑 guide class 不必要 related 1.明確處理對象,在restframework的處理過程當中,如果是針對model寫視圖的話,queryset是要待展示的對象集,serializer_class是對每一個對象的所要使

【已解決】在 Visual Studio 設置 JavaScript/TypeScript 的斷點 腳本出現自動中斷錯誤

chrome alt 啟動應用 出現 ont ash 解決方法 腳本調試 設置 運行ASP.NET Core 程序出現錯誤如下: 已啟用 Visual Studio 中的 Chrome 腳本調試 在 Visual Studio 中設置 JavaScript/Type

關於JavaScriptprototype機制的理解

func image 開始 auto com scrip pla 技術 研究   最近幾天一直在研究JavaScript中原型的機制,從開始的似懂非懂,到今天終於有所領悟。不敢說徹底理解,但是起碼算知道怎麽回事了。   為什麽一開始似懂非懂   開始了解一遍原型機制後,感覺

JavaScript閉包的理解

func web瀏覽器 並且 清晰 分享 數量 接下來 我們 回收 相信很多人都有看過關於閉包的文章,但是真正意義上的了解清楚的也不多,今天我們就來談談對閉包的理解。 閉包在JavaScript中一直是一個很重要的存在,閉包很重要但是又很難理解,起初我也是這樣認為,但只要真

JavaScript在頁面的執行順序(理解聲明式函數與賦值式函數) 轉載

AD TE 我們 行動 first FN 順序 而且 編譯性語言 JavaScript在頁面中的執行順序 https://blog.csdn.net/superhoy/article/details/52946277 2016年10月27日 15:38:52 閱讀數:

深入淺析JavaScriptwith語句的理解

code 完美 情況下 前端 導致 全局 節點 什麽 ons JavaScript 有個 with 關鍵字, with 語句的原本用意是為逐級的對象訪問提供命名空間式的速寫方式. 也就是在指定的代碼區域, 直接通過節點名稱調用對象. with語句的作用是暫時改變作用域鏈、減