1. 程式人生 > >JAVA中堆,棧,解釋

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的方法,靜態方法不能呼叫普通方法,普通方法可以呼叫靜態方法

因為靜態方法是在方法區可以被其它的執行緒呼叫

沒呼叫之前的預設構造方法也在方法區