Java虛擬機內存模型概念

Java虛擬機內存模型概念

   Java虛擬機的內存可以分爲三個區域:棧stack、堆heap、方法區method area

   一、棧stack

   1.  棧描述的是方法執行的內存模型,每個方法被調用都會創建一個棧幀(存儲局部變量、操作數、方法出口等)
   2. JVM爲每個線程創建一個棧,用於存放該線程執行方法的信息(實際參數,局部變量等)
   3. 棧屬於線程私有,不能實現線程間的共享
   4. 棧的存儲特性是"先進後出,後進先出"
   5. 棧是由系統自動分配,速度快。棧是一個連續的內存空間。

  二、堆heap
   1.  堆用於存儲創建好的對象和數組(數組也是對象)
   2. JVM只有一個堆,被所有線程共享
   3. 堆是一個不連續的內存空間,分配靈活,速度慢。
   4. 堆被所有的線程所共享,在堆上的區域,會被垃圾回收器做進一步劃分,例如新生代,老年代的劃分

   三、方法區method area
   1.   方法區是JAVA虛擬機規範,可以有不同的實現

  •    JDK7以前是"永久代"
  •   JDK7部分去除"永久代",靜態變量、字符串常量池都挪到了堆內存中
  •   JDK8是"元數據空間"和堆結合起來

   2.  JVM只有一個方法區,被所有線程共享
   3.  方法區實際也是堆,只是用於存儲類、常量相關的信息
   4.  用來存放程序中永遠不變或唯一的內容(類信息、靜態變量、字符串常量)
   5.  常量池主要存放常量:如文本字符串、final常量值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章