在第二章中,我有幾個(gè)小疑問吧
1.在第二章中,提到本地方法棧是為虛擬機(jī)使用的Native 方法服務(wù),那么什么是Native方法呢?
Native方法簡(jiǎn)而言之就是一個(gè)java調(diào)用非java代碼(如c語(yǔ)言等)的接口,因?yàn)樵谂c操作系統(tǒng)或其他java環(huán)境外的接口進(jìn)行交互時(shí),可能使用其他語(yǔ)言在效率上會(huì)更加有優(yōu)勢(shì)。
在JVM中,使Native方法跑起來的方法是:當(dāng)一個(gè)類第一次被使用到時(shí),它的字節(jié)碼會(huì)被加載進(jìn)內(nèi)存,在這個(gè)被加載的字節(jié)碼的入口維持著一個(gè)該類所有方法描述符的list,這些方法描述符包含這樣一些信息:方法代碼存于何處,它有哪些參數(shù),方法的描述符(public之類)等等。
如果一個(gè)方法描述符內(nèi)有native,這個(gè)描述符塊將有一個(gè)指向該Native方法的實(shí)現(xiàn)的指針。這些實(shí)現(xiàn)在一些DLL文件內(nèi),但是它們會(huì)被操作系統(tǒng)加載到j(luò)ava程序的地址空間。當(dāng)一個(gè)帶有本地方法的類被加載時(shí),其相關(guān)的DLL并未被加載,因此指向方法實(shí)現(xiàn)的指針并不會(huì)馬上被設(shè)置。當(dāng)本地方法被調(diào)用之前,這些DLL才會(huì)被加載,這是通過調(diào)用java.system.loadLibrary()實(shí)現(xiàn)的。
相關(guān)的知識(shí)參考:http://blog.csdn.net/wike163/article/details/6635321
2.什么是內(nèi)存泄漏
以前在學(xué)習(xí)c++的時(shí)候聽到過這個(gè)概念,看書時(shí)又再次看到。
內(nèi)存泄漏就是在你的代碼中創(chuàng)建對(duì)象之后,因?yàn)槟撤NBUG的存在導(dǎo)致沒有釋放這個(gè)對(duì)象所占有的內(nèi)存。在JAVA中由于存在垃圾自動(dòng)收集機(jī)制,會(huì)大大減少內(nèi)存泄漏的幾率。
有關(guān)內(nèi)存泄漏的詳細(xì)內(nèi)容可以參考
http://www.itdecent.cn/p/54b5da7c6816