JAVA的JVM的內存

JAVA的JVM的內存可分爲3個區:堆(heap)、棧(stack)和方法區(method)java

堆區: 1.存儲的所有是對象,每一個對象都包含一個與之對應的class的信息。(class的目的是獲得操做指令) 2.jvm只有一個堆區(heap)被全部線程共享,堆中不存放基本類型和對象引用,只存放對象自己.程序員

3.通常由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。網絡

棧區: 1.每一個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中 2.每一個棧中的數據(原始類型和對象引用)都是私有的,其餘棧不能訪問。 3.棧分爲3個部分:基本類型變量區、執行環境上下文、操做指令區(存放操做指令)。app

4.由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等.jvm

靜態區/方法區: 1.方法區又叫靜態區,跟堆同樣,被全部的線程共享。方法區包含全部的class和static變量。 2.方法區中包含的都是在整個程序中永遠惟一的元素,如class,static變量。函數

3.—,全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另外一塊區域。測試

代碼實例(轉自網絡)this

AppMain.java public class AppMain //運行時, jvm 把appmain的信息都放入方法區 { public static void main(String[] args) //main 方法自己放入方法區。 { Sample test1 = new Sample( " 測試1 " ); //test1是引用,因此放到棧區裏, Sample是自定義對象應該放到堆裏面 Sample test2 = new Sample( " 測試2 " );線程

test1.printName();
     test2.printName();
}

}code

Sample.java

public class Sample //運行時, jvm 把appmain的信息都放入方法區 { /** 範例名稱 */ private name; //new Sample實例後, name 引用放入棧區裏, name 對象放入堆裏

/** 構造方法 */
 public  Sample(String name)
 {
      this .name = name;
 }

 /** 輸出 */
 public   void  printName()   //print方法自己放入 方法區裏。
 {
     System.out.println(name);
 }

}

相關文章
相關標籤/搜索