JVM 內存共分爲堆、方法區、虛擬機棧、本地方法棧、程序計數器五個部分。
如下圖
1 堆
Java堆內存是 JVM 所有線程共享的部分,在虛擬機啓動的時候就已經創建.此區域的唯一目的是存放數據對象,
所有的對象實例以及數組都要在堆上分配,
Java堆是垃圾收集器管理的主要區域,因此很多時候也被稱爲GC堆,java中的堆可以分爲新生代和老年代
例如:
String str =new String("abc");
"abc" 就存放在堆中
2 方法區
方法區於Java堆一樣,是各個線程共享的區域,它用於存儲已被虛擬機加載的類信息,常量,靜態變量即時編譯後的代碼等數據
例如:
String str="abc"
abc 就是存放在常量池裏面,當然也算是存放在方法區裏面
3 Java虛擬機棧
Java虛擬機棧是線程私有的,它的生命週期與線程相同.java虛擬機棧描述的時Java方法區的內存模型:每個方法在執行的同時
都會創建一個棧幀用於存儲局部變量表,操作數據棧,動態lian鏈接,方法出口等信息..
例如:
String str ="abc"
str 就存放在棧中
4 本地方法棧
本地方法棧與虛擬機棧的作用非常相似,區別就是虛擬機棧爲虛擬機執行java方法(也就是字節碼)服務
本地方法棧則爲虛擬機使用到Native方法服務
5 程序計數器
程序計數器是一塊較小的內存空間,它可以看做是當前線程所執行的字節碼的型號指示器