1. 程式人生 > >java中堆疊的理解

java中堆疊的理解

本文中介紹的都是很淺顯的東西,如果有問題請指出

一、暫存器、位(bit)、位元組(byte)

       暫存器:

                   概念:最快的儲存單元,處於處理器內部,數量有限,按需分配,不能直接控制;

                   大小:和系統有關,32位系統就是暫存器的大小位32位,64位系統指的就是暫存器的大小為64位;

       位元組:一位等於8位元組,儲存空間最小的計量單位,字母與數字一個佔用一個位元組,漢字一個佔用倆個位元組;

       位:記憶體中最小的資料單元,只能為0或者1;

二、堆疊(堆疊和堆不一樣,堆疊就是平時說的棧)

        作用:用來儲存基本型別的變數、引用以及函式呼叫的現場;

        原理:位於RAM(隨機訪問儲存區),通過堆疊指標的上下移動來決定是分配記憶體還是釋放記憶體(向上移動為釋放,向下移動為分配新的記憶體),且在java中要將其放在堆疊記憶體中,則必須明確說明其生命週期,及在堆疊中的資訊都是有確切的生命週期的,這也是其缺點,不夠靈活;

      ps:物件和引用不一樣的,在堆疊中只是儲存的引用,物件並不在堆疊中儲存(引用型別),引用相當於一個操作物件的識別符號;

           函式呼叫的現場:就是運行當前函式的地方也在堆疊中;

三、堆;

     作用:通用的記憶體池(RAM),存放java所有的物件(引用物件);

     好處:相對於堆疊來說不需要確切的知道物件的生命週期;(gc的主要區域)

     ps:gc機制:gc器會監視所有的new的物件,並且辨別那些不需要使用的物件,然後釋放記憶體,不需要手動呼叫;

             陣列也是引用物件型別;

             基本型別的變數的值是直接在堆疊中建立的(再次強調堆疊、堆不一樣);

四、常量儲存;

     作用:儲存常量的地方;

     位置:存放在程式碼內部,永遠不會有改變(指的是引用指向的記憶體地址,但是物件的內容是可變的);

五、非RAM記憶體(不講解,因為我也不懂。。。);

    概念:存在於程式之外,不受任何程式的控制;例子:流物件與持久化物件;