內(nèi)存

內(nèi)存大家都知道(當(dāng)然不是硬盤(pán)?。?。與c、c++相比呢,Java在內(nèi)存管理的方面一個(gè)優(yōu)越之處就是我們不用顯式的去對(duì)對(duì)象進(jìn)行內(nèi)存的分配和內(nèi)存的回收,可能有人會(huì)著迷于對(duì)內(nèi)存使用分配的這種快感,但是隨著程序變大,對(duì)于內(nèi)存的維護(hù)工作也就越來(lái)越大。Java的JVM的自動(dòng)內(nèi)存管理機(jī)制,凸顯出了強(qiáng)大的優(yōu)越感。。。。

但反而是因?yàn)檫@樣的一個(gè)現(xiàn)狀,就弱化了我們?cè)趯?xiě)Java程序時(shí)遇到內(nèi)存溢出等問(wèn)題時(shí)的定位能力和解決問(wèn)題的能力。就在這個(gè)時(shí)候一本書(shū)應(yīng)運(yùn)而生--- 《深入理解java虛擬機(jī)》 這本書(shū)也算是我旁邊落灰最嚴(yán)重的一本了,但寫(xiě)程序就是這樣如果不沉到底,程序浮于表面那就只是單純的應(yīng)用,不能變的熟練。
只有我們真正的了解了JVM如何管理內(nèi)存后,才能遇見(jiàn)OutOfMemory錯(cuò)誤時(shí),快速的根據(jù)異常日志信息定位和解決問(wèn)題。

Java內(nèi)存分配方式

咱們看看上面這張圖,顏色這么鮮艷,這次一定能記住了!

  1. 靜態(tài) 存儲(chǔ)區(qū)

    內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好了,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。比如,static 、全局變量

  2. 在  上創(chuàng)建

    在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分匹配運(yùn)算內(nèi)置于處理器的指令集中、效率很高、但是分配的內(nèi)存容量非常有限。

  3. 在  上分配

    動(dòng)態(tài)內(nèi)存分配。在c和c++中運(yùn)行程序時(shí)用 malloc 或 new申請(qǐng)任意大小的內(nèi)存,我們需要自己決定自己在何時(shí)何地使用使用free和delete來(lái)釋放內(nèi)存。

Java虛擬機(jī)內(nèi)存模型是Ja

網(wǎng)友評(píng)論