JAVA變量存放在棧中還是存放在堆中?
棧內存:某一個函數被調用時,這個函數會在棧內存里面申請一片空間,以后在這個函數內部定義的變量,都會分配到這個函數所申請到的棧。當函數運行結束時,分配給函數的棧空間被收回,在這個函數中被定義的變量也隨之被釋放和消失。
堆內存:通過new產生的數組和對象分配在堆內存中。堆內存中分配的內存,由JVM提供的GC(垃圾回收機制)來管理。在堆內存中產生了一個數組對象后,我們還可以在棧中定義一個變量,這個棧中變量的取值等于堆中對象的首地址。棧內存中的變量就成了堆內存中數組或者對象的引用變量。我們以后就可以在程序中直接使用棧中的這個變量來訪問我們在堆中分配的數組或者對象,引用變量相當于數組或者對象起的一個別名,或者代號。
引用變量是一個普通的變量,定義時在棧中分配;引用變量在被運行到它的作用域之外時就被釋放,而我們的數組和對象本身是在堆中分配的,即使程序運行到使用new產生對象的語句所在的函數或者代碼之后,我們剛才被產生的數組和對象也不會被釋放。數組和對象只是在沒有引用變量指向它,也就是沒有任何引用變量的值等于它的首地址,它才會變成垃圾不會被使用,但是它任然占據著內存空間不放(這也就是我們Java比較吃內存的一個原因),在隨后一個不確定的時間被垃圾回收器收走。
上一篇考研復習進入不了狀態
下一篇電腦安裝上它會怎么樣