2018-06-25

JVM的內(nèi)存結(jié)構(gòu)

根據(jù) JVM 規(guī)范,JVM 內(nèi)存共分為虛擬機(jī)棧、堆、方法區(qū)、程序計(jì)數(shù)器、本地方法棧五個部分。

1、Java虛擬機(jī)棧:

線程私有;每個方法在執(zhí)行的時候會創(chuàng)建一個棧幀,存儲了局部變量表,操作數(shù)棧,動態(tài)連接,方法返回地址等;每個方法從調(diào)用到執(zhí)行完畢,對應(yīng)一個棧幀在虛擬機(jī)棧中的入棧和出棧。

2、堆:

線程共享;被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動時創(chuàng)建,用于存放對象實(shí)例。

3、方法區(qū):

線程共享;被所有線程共享的一塊內(nèi)存區(qū)域;用于存儲已被虛擬機(jī)加載的類信息,常量,靜態(tài)變量等。

4、程序計(jì)數(shù)器:

線程私有;是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器,每條線程都要有一個獨(dú)立的程序計(jì)數(shù)器,這類內(nèi)存也稱為“線程私有”的內(nèi)存。

5、本地方法棧:

線程私有;主要為虛擬機(jī)使用到的Native方法服務(wù)。

大體回答如上,類似文章請移駕:

JVM的內(nèi)存區(qū)域劃分

JVM知識點(diǎn)梳理

JVM內(nèi)存分配與回收

JVM內(nèi)存管理機(jī)制

強(qiáng)引用,軟引用和弱引用的區(qū)別

強(qiáng)引用:

只有這個引用被釋放之后,對象才會被釋放掉,只要引用存在,垃圾回收器永遠(yuǎn)不會回收,這是最常見的New出來的對象。

軟引用:

內(nèi)存溢出之前通過代碼回收的引用。軟引用主要用戶實(shí)現(xiàn)類似緩存的功能,在內(nèi)存足夠的情況下直接通過軟引用取值,無需從繁忙的真實(shí)來源查詢數(shù)據(jù),提升速度;當(dāng)內(nèi)存不足時,自動刪除這部分緩存數(shù)據(jù),從真正的來源查詢這些數(shù)據(jù)。

弱引用:

第二次垃圾回收時回收的引用,短時間內(nèi)通過弱引用取對應(yīng)的數(shù)據(jù),可以取到,當(dāng)執(zhí)行過第二次垃圾回收時,將返回null。弱引用主要用于監(jiān)控對象是否已經(jīng)被垃圾回收器標(biāo)記為即將回收的垃圾,可以通過弱引用的isEnQueued方法返回對象是否被垃圾回收器標(biāo)記。

大體回答如上,類似文章請移駕:

Java 如何有效地避免OOM:善于利用軟引用和弱引用

數(shù)組在內(nèi)存中如何分配

1、簡單的值類型的數(shù)組,每個數(shù)組成員是一個引用(指針),引用到棧上的空間(因?yàn)橹殿愋妥兞康膬?nèi)存分配在棧上)

2、引用類型,類類型的數(shù)組,每個數(shù)組成員仍是一個引用(指針),引用到堆上的空間(因?yàn)轭惖膶?shí)例的內(nèi)存分配在堆上)

用過哪些設(shè)計(jì)模式,手寫一個(除單例)

設(shè)計(jì)模式早有總結(jié),看這里:23種設(shè)計(jì)模式完整總結(jié)

springmvc的核心是什么,請求的流程是怎么處理的,控制反轉(zhuǎn)怎么實(shí)現(xiàn)的

核心:

控制反轉(zhuǎn)和面向切面

請求處理流程:

1、首先用戶發(fā)送請求到前端控制器,前端控制器根據(jù)請求信息(如URL)來決定選擇哪一個頁面控制器進(jìn)行處理并把請求委托給它,即以前的控制器的控制邏輯部分;

2、頁面控制器接收到請求后,進(jìn)行功能處理,首先需要收集和綁定請求參數(shù)到一個對象,并進(jìn)行驗(yàn)證,然后將命令對象委托給業(yè)務(wù)對象進(jìn)行處理;處理完畢后返回一個ModelAndView(模型數(shù)據(jù)和邏輯視圖名);

3、前端控制器收回控制權(quán),然后根據(jù)返回的邏輯視圖名,選擇相應(yīng)的視圖進(jìn)行渲染,并把模型數(shù)據(jù)傳入以便視圖渲染;

4、前端控制器再次收回控制權(quán),將響應(yīng)返回給用戶。

控制反轉(zhuǎn)如何實(shí)現(xiàn):

我們每次使用spring框架都要配置xml文件,這個xml配置了bean的id和class。

spring中默認(rèn)的bean為單實(shí)例模式,通過bean的class引用反射機(jī)制可以創(chuàng)建這個實(shí)例。

因此,spring框架通過反射替我們創(chuàng)建好了實(shí)例并且替我們維護(hù)他們。

A需要引用B類,spring框架就會通過xml把B實(shí)例的引用傳給了A的成員變量。

大體回答如上,類似文章請移駕:

理解Spring中的IOC和AOP

spring里面的aop的原理是什么

這個有介紹,看這里:Spring的IOC原理

mybatis如何處理結(jié)果集

MyBatis的結(jié)果集是通過反射來實(shí)現(xiàn)的。并不是通過get/set方法。在實(shí)體類中無論是否定義get/set()方法,都是可以接收到的。

如果面試只是考你這個點(diǎn)的話就恭喜了。如果繼續(xù)深問流程,那就需要自己找一些源碼來閱讀了。

java的多態(tài)表現(xiàn)在哪里

主要有兩種表現(xiàn)形式:重載和重寫

重載:

是發(fā)生在同一類中,具有相同的方法名,主要是看參數(shù)的個數(shù),類型,順序不同實(shí)現(xiàn)方法的重載的,返回值的類型可以不同。

重寫:

是發(fā)生在兩個類中(父類和子類),具有相同的方法名,主要看方法中參數(shù),個數(shù),類型必須相同,返回值的類型必須相同。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容