近段時(shí)間研究了java的程序執(zhí)行過(guò)程中的內(nèi)存分配,收獲頗多,解決了我最近時(shí)間學(xué)習(xí)java的很多困惑點(diǎn)。寫java內(nèi)存分析系列的目的主要有兩個(gè),一來(lái)是希望給像我一樣的java初學(xué)者一定的啟發(fā),希望也能解決的java關(guān)于內(nèi)存方面的困惑點(diǎn)。二來(lái)也是給自己做個(gè)總結(jié),畢竟只有自己親自寫出來(lái)的東西,才是真正的東西。今天就開(kāi)始java程序執(zhí)行過(guò)程內(nèi)存分析系列第一篇。
一、 java執(zhí)行程序時(shí)內(nèi)存的劃分
一般來(lái)說(shuō),作為初學(xué)者,一般只是將java程序的內(nèi)存只是分為棧區(qū),和堆區(qū)。確實(shí)剛開(kāi)始學(xué)時(shí)這樣劃分能都便于我們理解,但是隨著學(xué)習(xí)java時(shí)間的增多,如果內(nèi)存劃分還只是簡(jiǎn)單的只有棧和堆兩個(gè)區(qū),就有很多東西不能深入理解,就拿個(gè)常用的字符來(lái)說(shuō),就很難理解字符串的一些特性。于是乎我這里就增加一個(gè)內(nèi)存區(qū)域的劃分,這樣比以前能理解更多的東西。這個(gè)新增的內(nèi)存區(qū)域是什么呢?其實(shí)也不是新增,就是把以前堆內(nèi)存劃分為方法區(qū)和其他區(qū)。那方法區(qū)里面存放些什么東西勒,方法區(qū)里面主要存放三個(gè)東西,第一個(gè)是程序的代碼,第二個(gè)是常量池,這里主要存放一些java程序中的一些常量和字符串常量,第三個(gè)是靜態(tài)的變量。堆內(nèi)存劃分如圖所示。
二、.一個(gè)java程序執(zhí)行過(guò)程中的內(nèi)存分析
首先我定義了一個(gè)people類,里面有姓名和性別兩個(gè)成員變量和一個(gè)說(shuō)話的成員方法。另外還有一個(gè)測(cè)試類,測(cè)試people類,好了,萬(wàn)事俱備,只欠東風(fēng)了。下面正式開(kāi)始內(nèi)存分析。
1 public class People {2 String name;//定義一個(gè)人的姓名3 String sex;4 public void speak(){5