問題1:為什么做堆棧分離轴捎?
答:1.因?yàn)槎芽梢跃€程共享,而棧是線程獨(dú)占,所以可以節(jié)約內(nèi)存释牺。
2.模塊化的設(shè)計(jì)思想
3.棧因?yàn)樾枰4嫦到y(tǒng)運(yùn)行上下文(線程切換),所以地址段是提起劃分
好的萝衩,也就是說,棧的大小是固定的(可以用jmeter查看線程創(chuàng)
建時(shí)的內(nèi)存變化情況没咙,基本一個(gè)線程給10m的內(nèi)存空間)
4.面向?qū)ο?-就是堆棧猩谊,堆存儲(chǔ)屬性,棧儲(chǔ)存方法祭刚,屬性就是數(shù)據(jù)牌捷,方
法就是運(yùn)行邏輯。
問題2:堆棧中分別存什么涡驮?
答: 堆:存對(duì)象暗甥,大小不可估。
棧:基本數(shù)據(jù)類型(大小固定捉捅,且小(1-8個(gè)字節(jié)))撤防,堆對(duì)象引用
(4btye)
問題3:java中參數(shù)傳遞是值傳遞還是引用傳遞
答: 在棧中都是傳引用值調(diào)用。咋進(jìn)入被調(diào)用方法時(shí)棒口,被傳遞的這個(gè)引用的值寄月,
被程序查找到堆中,這個(gè)時(shí)候才對(duì)應(yīng)到真正的對(duì)象无牵。如果此時(shí)修改漾肮,
是修改的堆對(duì)象,而非引用茎毁,所以修改是可以保持的初橘。
問題4:Java對(duì)象的大小充岛?
答: 空Object對(duì)象的大小是8byte保檐,完成生命周期的空間大小是4byte(棧中引用的大小)
+8byte崔梗。所以其他對(duì)象的大小可以根據(jù)基本類型計(jì)算夜只。
包裝類型是對(duì)象,它的大小至少16byte(java大小是8的整數(shù)倍),基本內(nèi)存開銷是基本
類型的N倍蒜魄,另外JDK5有自動(dòng)類型轉(zhuǎn)換了扔亥。
問題5:引用類型
答: 強(qiáng)引用:new對(duì)象時(shí),虛擬機(jī)生成的引用谈为。被強(qiáng)引用則不會(huì)被垃圾回收
軟引用:緩存旅挤,內(nèi)存多就不回收,內(nèi)存少就回收伞鲫,OutofMemory時(shí)粘茄,肯定沒軟引用了
弱引用:緩存,只要發(fā)生垃圾回收就一定回收,活不過一個(gè)周期
虛引用:跟蹤垃圾回收過程柒瓣,做系統(tǒng)通知用儒搭,告知對(duì)象被收集器回收了
虛引用編碼時(shí)接觸不到,軟虛做緩存芙贫,但是內(nèi)存夠時(shí)應(yīng)該用強(qiáng)引用做緩存搂鲫,控制權(quán)
不要交給jvm