對(duì)象的方法不占用內(nèi)存 Java對(duì)象使用后設(shè)置為null會(huì)減少內(nèi)存占用嗎?
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)存中。例如,st
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ù)斷開(kāi)連接。GC算法會(huì)在必要時(shí)回收STR和堆內(nèi)存中的對(duì)象,但是我們不能干預(yù)GC的任何回收。
.GC將在正確的時(shí)間回收垃圾數(shù)據(jù)。
關(guān)于對(duì)象成員占用內(nèi)存的說(shuō)法哪個(gè)正確?
關(guān)于對(duì)象成員占用的內(nèi)存,以下哪項(xiàng)陳述是正確的?A.同一類(lèi)的對(duì)象共享相同的內(nèi)存;B.同一類(lèi)的對(duì)象使用不同的內(nèi)存段,但靜態(tài)成員共享相同的內(nèi)存空間;C.對(duì)象的方法不占用內(nèi)存D.以上都不是真的
對(duì)于一般類(lèi)(非靜態(tài)),當(dāng)定義一個(gè)類(lèi)而不創(chuàng)建一個(gè)對(duì)象時(shí),該類(lèi)的所有成員類(lèi)(包括變量和函數(shù))占用內(nèi)存空間(確切地說(shuō),它們占用指令代碼區(qū)),但不占用堆??臻g
在創(chuàng)建對(duì)象時(shí),它們會(huì)根據(jù)對(duì)象的類(lèi)型占用堆棧空間(在傳統(tǒng)模式下創(chuàng)建對(duì)象會(huì)節(jié)省內(nèi)存空間)占用堆??臻g,使用引用在新模式下創(chuàng)建對(duì)象將占用堆空間,引用將保存在堆棧中)
對(duì)于靜態(tài)類(lèi),靜態(tài)類(lèi)不能實(shí)例化和創(chuàng)建對(duì)象。所有成員都是靜態(tài)成員,它們也需要占用內(nèi)存空間,但它們不在堆棧中,而是在內(nèi)存的靜態(tài)/全局區(qū)域中(該區(qū)域用于存儲(chǔ)所有全局成員和靜態(tài)成員)