看這個標題就大概知道了這一章的內容數組
內存?奇怪的東西。jvm
看了咱們前面的Java運行機制咱們都知道Java程序在運行的時候會建立一個jvm(Java虛擬機)函數
我就簡單的畫一下jvm的內存結構:對象
首先jvm中有兩大地方:一個叫作棧,另外一個叫作堆,分別有不一樣的特色blog
棧:空間小,存儲速度快,主要存儲基本數據類型的變量(局部變量),還有一個特色就是:先進後出索引
堆:空間大,存儲速度慢,主要存儲的是對象,內存
如咱們圖中的代碼:
虛擬機
咱們簡單的模擬一下運行時內存的狀況:變量
程序是從main函數開始運行的,確定是main函數先進棧,在棧的最下面數據類型
而後往下走,遇到建立數組的代碼
這時會作兩個件事,一是在棧中開闢一塊空間,二是在堆中開闢一塊空間
首先來看棧中,開闢後就會壓在main函數的上面,而且這塊內存有個名字:array
再看堆中,這塊內存會有一個地址,這個地址都是十六進制,而後把每一個值存入對應的索引中
棧中array內存中的內容也會變成這個堆中的地址
大概就是這個樣子。
當咱們使用這個數組時,確定會根據數組的名字找到這塊內存空間,而後發現裏面是個地址,而後跳轉到堆中,根據索引獲得對應的值。
當程序執行完後,array內存釋放(至關於刪除),而後main出棧。
數組的內存結果大概就是這樣子了。