java將內(nèi)存分為四塊:
- stacksegment:【棧區(qū)】由編譯器自動(dòng)分配和釋放步悠,存放函數(shù)參數(shù)和敬,局部變量等
- heapsegment:【堆區(qū)】一般由工程師分配和釋放诀诊,如果工程師不釋放自動(dòng)GC回收掀泳,new出來(lái)的所有對(duì)象都在heap中
- datasegment:【靜態(tài)區(qū)】存放全部變量月幌,靜態(tài)變量和字符串常量碍讯。不釋放
- codesegment:【代碼區(qū)】存放程序中方法的二進(jìn)制代碼,而且是多個(gè)對(duì)象共享一個(gè)空間的區(qū)域
Java虛擬機(jī)內(nèi)存的堆區(qū)(heap)扯躺,棧區(qū)(stack)和靜態(tài)區(qū)(static/method)
JAVA的JVM的內(nèi)存可分為3個(gè)區(qū):堆(heap)捉兴、棧(stack)和方法區(qū)(method)
堆區(qū):
1.存儲(chǔ)的全部是對(duì)象,每個(gè)對(duì)象都包含一個(gè)與之對(duì)應(yīng)的class的信息录语。(class的目的是得到操作指令)
2.jvm只有一個(gè)堆區(qū)(heap)被所有線程共享倍啥,堆中不存放基本類型和對(duì)象引用,只存放對(duì)象本身.
3.一般由程序員分配釋放澎埠, 若程序員不釋放虽缕,程序結(jié)束時(shí)可能由OS回收 。
棧區(qū):
1.每個(gè)線程包含一個(gè)棧區(qū)蒲稳,棧中只保存基礎(chǔ)數(shù)據(jù)類型的對(duì)象和自定義對(duì)象的引用(不是對(duì)象)氮趋,對(duì)象都存放在堆區(qū)中
2.每個(gè)棧中的數(shù)據(jù)(原始類型和對(duì)象引用)都是私有的,其他棧不能訪問(wèn)弟塞。
3.棧分為3個(gè)部分:基本類型變量區(qū)凭峡、執(zhí)行環(huán)境上下文、操作指令區(qū)(存放操作指令)决记。
4.由編譯器自動(dòng)分配釋放 摧冀,存放函數(shù)的參數(shù)值,局部變量的值等.
靜態(tài)區(qū)/方法區(qū):
1.方法區(qū)又叫靜態(tài)區(qū)系宫,跟堆一樣索昂,被所有的線程共享。方法區(qū)包含所有的class和static變量扩借。
2.方法區(qū)中包含的都是在整個(gè)程序中永遠(yuǎn)唯一的元素椒惨,如class,static變量潮罪。
3.—康谆,全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域嫉到, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域沃暗。