java內(nèi)存詳解

java將內(nèi)存分為四塊:

  • stacksegment:【棧區(qū)】由編譯器自動分配和釋放,存放函數(shù)參數(shù),局部變量等
  • heapsegment:【堆區(qū)】一般由工程師分配和釋放,如果工程師不釋放自動GC回收,new出來的所有對象都在heap中
  • datasegment:【靜態(tài)區(qū)】存放全部變量,靜態(tài)變量和字符串常量。不釋放
  • codesegment:【代碼區(qū)】存放程序中方法的二進制代碼,而且是多個對象共享一個空間的區(qū)域

Java虛擬機內(nèi)存的堆區(qū)(heap),棧區(qū)(stack)和靜態(tài)區(qū)(static/method)

JAVA的JVM的內(nèi)存可分為3個區(qū):堆(heap)、棧(stack)和方法區(qū)(method)

堆區(qū):
1.存儲的全部是對象,每個對象都包含一個與之對應的class的信息。(class的目的是得到操作指令)
2.jvm只有一個堆區(qū)(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身.
3.一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。

棧區(qū):
1.每個線程包含一個棧區(qū),棧中只保存基礎數(shù)據(jù)類型的對象和自定義對象的引用(不是對象),對象都存放在堆區(qū)中
2.每個棧中的數(shù)據(jù)(原始類型和對象引用)都是私有的,其他棧不能訪問。
3.棧分為3個部分:基本類型變量區(qū)、執(zhí)行環(huán)境上下文、操作指令區(qū)(存放操作指令)。
4.由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等.

靜態(tài)區(qū)/方法區(qū):
1.方法區(qū)又叫靜態(tài)區(qū),跟堆一樣,被所有的線程共享。方法區(qū)包含所有的class和static變量。
2.方法區(qū)中包含的都是在整個程序中永遠唯一的元素,如class,static變量。
3.—,全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。

圖片.png
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容