內(nèi)存
內(nèi)存大家都知道(當(dāng)然不是硬盤?。Ecc、c++相比呢,Java在內(nèi)存管理的方面一個優(yōu)越之處就是我們不用顯式的去對對象進行內(nèi)存的分配和內(nèi)存的回收,可能有人會著迷于對內(nèi)存使用分配的這種快感,但是隨著程序變大,對于內(nèi)存的維護工作也就越來越大。Java的JVM的自動內(nèi)存管理機制,凸顯出了強大的優(yōu)越感。。。。
但反而是因為這樣的一個現(xiàn)狀,就弱化了我們在寫Java程序時遇到內(nèi)存溢出等問題時的定位能力和解決問題的能力。就在這個時候一本書應(yīng)運而生--- 《深入理解java虛擬機》 這本書也算是我旁邊落灰最嚴(yán)重的一本了,但寫程序就是這樣如果不沉到底,程序浮于表面那就只是單純的應(yīng)用,不能變的熟練。
只有我們真正的了解了JVM如何管理內(nèi)存后,才能遇見OutOfMemory錯誤時,快速的根據(jù)異常日志信息定位和解決問題。
Java內(nèi)存分配方式
咱們看看上面這張圖,顏色這么鮮艷,這次一定能記住了!
靜態(tài) 存儲區(qū)
內(nèi)存在程序編譯的時候就已經(jīng)分配好了,這塊內(nèi)存在程序的整個運行期間都存在。比如,static 、全局變量
在 棧 上創(chuàng)建
在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分匹配運算內(nèi)置于處理器的指令集中、效率很高、但是分配的內(nèi)存容量非常有限。
在 堆 上分配
動態(tài)內(nèi)存分配。在c和c++中運行程序時用 malloc 或 new申請任意大小的內(nèi)存,我們需要自己決定自己在何時何地使用使用free和delete來釋放內(nèi)存。
Java虛擬機內(nèi)存模型是Ja