java內(nèi)存分配 Java對(duì)象使用后設(shè)置為null會(huì)減少內(nèi)存占用嗎?
Java對(duì)象使用后設(shè)置為null會(huì)減少內(nèi)存占用嗎?首先科普一下,Java對(duì)象是引用變型的,它會(huì)用兩種內(nèi)存區(qū):堆內(nèi)存、棧內(nèi)存。Java對(duì)象是存儲(chǔ)在堆內(nèi)存中的,而對(duì)此對(duì)象的引用(理解為變量)存儲(chǔ)在棧內(nèi)存中
Java對(duì)象使用后設(shè)置為null會(huì)減少內(nèi)存占用嗎?
首先科普一下,Java對(duì)象是引用變型的,它會(huì)用兩種內(nèi)存區(qū):堆內(nèi)存、棧內(nèi)存。Java對(duì)象是存儲(chǔ)在堆內(nèi)存中的,而對(duì)此對(duì)象的引用(理解為變量)存儲(chǔ)在棧內(nèi)存中。
比如:String str=new String("字符串") 這行代碼用的是兩塊內(nèi)存,new String("字符串") 存在堆內(nèi)存中,str 變量存儲(chǔ)在棧內(nèi)存中。
當(dāng)我們?cè)O(shè)置對(duì)象為 null 后(即:str=null),此時(shí)str變量與堆內(nèi)存中的數(shù)據(jù)就斷開聯(lián)系了,GC算法會(huì)在必要時(shí)回收 str 及堆內(nèi)存中的對(duì)象,但這個(gè)GC任何回收我們是無法干預(yù)的。
總結(jié)說就是:Java對(duì)象在使用后設(shè)置為null,在GC對(duì)此對(duì)象回收后,內(nèi)存會(huì)相應(yīng)減少,但不是說將一個(gè)對(duì)象引用設(shè)置為null后內(nèi)存就立馬釋放了。GC會(huì)在合適的時(shí)間來回收垃圾數(shù)據(jù)。