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