JAVA中堆,棧,解釋
JVM將JAVA儲存內容在記憶體中分為5個區,現在講最重要的3個區:
例子: int a = 1; int b = a; b = 3;
class dog {
private String name;
}
dog "叮噹" = new dog("叮噹"); dog 小卷毛 = "叮噹"; dog 小卷毛 = new dog("小卷毛")
1.棧
儲存基本型別(byte short int long float double boolean char)
引用物件 如 a , b ,叮噹,小卷毛;
無垃圾回收機制(不能自動釋放記憶體)
一個執行緒對應一個棧,棧之間不能互相呼叫
1.1執行緒與棧
每一個執行緒都有一個棧,執行緒是程序的例項,而執行一個程式是需要程序的,所以也需要執行緒。
得到你的輸入命令後,執行緒將通過CPU讓硬碟把資料寫入記憶體,一個動態快取的程式誕生了。
為什麼棧不能自動釋放記憶體,要佔用記憶體?
如果棧能自動釋放記憶體,你想想你的遊戲,你正打著LOL排位呢,突然釋放記憶體了
也就是結束程序。遊戲突然閃退了,那種感覺,簡直極致影響使用者體驗。
如果棧之間內互相呼叫?
那麼我打開了一個酷狗音樂,我能呼叫QQ音樂,那我把QQ音樂關了,你只能聽酷狗音樂
那樣多麼?多麼?混蛋。
2,堆
存放物件,如Scanner a = new Scanner(),存放的是Scanner,有辣雞回收機制。
棧中的引用物件以地址的形式引用堆中的物件
被執行緒共享
方法區
存放 類 和 靜態方法
方法區被執行緒共享
只有當你寫好的類被呼叫後才會儲存呼叫的類,並且呼叫一次將永遠存在直到你結束專案釋放所有記憶體
靜態方法新增static的方法,靜態方法不能呼叫普通方法,普通方法可以呼叫靜態方法
因為靜態方法是在方法區可以被其它的執行緒呼叫
沒呼叫之前的預設構造方法也在方法區