iphone運(yùn)行內(nèi)存 Java等語言的GC為什么不實(shí)時(shí)釋放內(nèi)存?
Java等語言的GC為什么不實(shí)時(shí)釋放內(nèi)存?謝謝!首先,Java的GC不使用引用計(jì)數(shù)器方法,而是使用可達(dá)性分析算法。這里我們將不詳細(xì)說明可達(dá)性分析算法。GC的目的是恢復(fù)已分配和未使用的內(nèi)存,提高內(nèi)存利用
Java等語言的GC為什么不實(shí)時(shí)釋放內(nèi)存?
謝謝
!首先,Java的GC不使用引用計(jì)數(shù)器方法,而是使用可達(dá)性分析算法。這里我們將不詳細(xì)說明可達(dá)性分析算法。
GC的目的是恢復(fù)已分配和未使用的內(nèi)存,提高內(nèi)存利用率和程序執(zhí)行效率。如果我們對(duì)內(nèi)存進(jìn)行實(shí)時(shí)的垃圾分析和回收,將會(huì)消耗更多的資源和執(zhí)行時(shí)間,抓雞不吃米。
希望對(duì)您有所幫助
Java對(duì)象使用后設(shè)置為null會(huì)減少內(nèi)存占用嗎?
首先,Java對(duì)象是引用變體,它使用兩種內(nèi)存區(qū)域:堆內(nèi)存和堆棧內(nèi)存。Java對(duì)象存儲(chǔ)在堆內(nèi)存中,對(duì)它們的引用(理解為變量)存儲(chǔ)在堆棧內(nèi)存中。
例如,string STR=new string(“string”)使用兩段內(nèi)存,new string(“string”)存儲(chǔ)在堆內(nèi)存中,STR變量存儲(chǔ)在堆棧內(nèi)存中。
當(dāng)我們將對(duì)象設(shè)置為null(即:STR=null)時(shí),STR變量與堆內(nèi)存中的數(shù)據(jù)斷開連接。GC算法會(huì)在必要時(shí)回收STR和堆內(nèi)存中的對(duì)象,但是我們不能干預(yù)GC的任何回收。
.GC將在正確的時(shí)間回收垃圾數(shù)據(jù)。