#. 在java中有兩類內(nèi)存。分別稱為stack(堆棧)和heap(堆)。
stack是程序內(nèi)存空間,因此所有的基本類型和對(duì)象的引用是存在stack中。
heap是java虛擬機(jī)儲(chǔ)存對(duì)象的,它是一個(gè)巨大的內(nèi)存,當(dāng)你創(chuàng)造一個(gè)對(duì)象,java虛擬機(jī)把對(duì)象放入heap中,把創(chuàng)造的對(duì)象的地址放入stack中。
因此,基本類型、對(duì)象的引用儲(chǔ)存在stack中;對(duì)象儲(chǔ)存在heap中。
#. java中的垃圾回收機(jī)制
當(dāng)你new一個(gè)新的對(duì)象,java分配必需的內(nèi)存。當(dāng)你用完一個(gè)對(duì)象時(shí),java的垃圾回收器為你把內(nèi)存收回。
垃圾回收以線程的形式在后臺(tái)運(yùn)行,尋找那些無有用引用(reference)的對(duì)象,發(fā)現(xiàn)之后便銷毀對(duì)象,并收回內(nèi)存。
垃圾回收是在java虛擬機(jī)間實(shí)現(xiàn)的,它們通常有相同的步驟,首先垃圾回收器獲得正在運(yùn)行的線程和所有已經(jīng)加載的類的快照,
然后所有線程中涉及到的對(duì)象被標(biāo)記為最近使用的,當(dāng)可能涉及的對(duì)象都被標(biāo)記的時(shí)候,剩下沒標(biāo)記的就被舍棄。
為了幫助虛擬機(jī),我們主動(dòng)移除一些不在需要的對(duì)象是一個(gè)不錯(cuò)的做法,可以通過將引用設(shè)置為null來實(shí)現(xiàn)。
eg:
Text t = new Test();
t.someAction();
//all done
t = null;
新聞熱點(diǎn)
疑難解答
圖片精選