java虛擬機的內存可以分爲三個區域:
- 棧
- 堆
- 方法區
1.棧
1.棧描述的是方法執行的內存模型,每個方法被調用都會創建一個棧幀
(存儲局部變量,操作數,方法出口等)
2.JVM爲每一個線程創建一個棧,用於存放該線程執行方法的信息(實際參數、局部變量等)
3.棧屬於線程私有,不能實現線程間的共享
4.棧的存儲特性是:先進後出,後進先出
5.棧是由系統自動分配的
2.堆
1.堆用於存儲創建好的對象和數組(數組也是對象)
2.JVM只有一個堆,被所有線程共享
3.堆是一個不連續的內存空間,分配靈活,速度慢
3.方法區(又叫靜態區)
1.JVM只有一個方法區,被所有線程共享
2.方法區實際也是堆,只是用於存儲類,常量相關的信息!
3.用來存放程序中永遠是不變或唯一的內容(類信息[Class對象]、靜態變量、字符串常量等)