【Simple Java】Java數組在記憶體中是如何存放的,simplejava

來源:互聯網
上載者:User

【Simple Java】Java數組在記憶體中是如何存放的,simplejava

Java中有兩種類型的數組:

  • 基礎資料型別 (Elementary Data Type)數組;
  • 對象數組;

當一個對象使用關鍵字“new”建立時,會在堆上分配記憶體空間,然後返回對象的引用,這對數組來說也是一樣的,因為數組也是一個對象;

一維數組
int[] arr = new int[3];

在以上代碼中,arr變數存放了數組對象的引用;如果你建立了空間大小為10的整形數組,情況是一樣的,一個數組對象所佔的空間在堆上被分配,然後返回其引用;

二維數組

那麼二維數組是如何儲存的呢?事實上,在Java中只有一維數組,二維數組是一個存放了數組的數組,如下代碼及:

int[ ][ ] arr = new int[3][ ];arr[0] = new int[3];arr[1] = new int[5];arr[2] = new int[4];

對於多維陣列來說,道理是一樣的;

數組對象及其引用存放在記憶體中的哪裡?

在Java中,數組同樣是一個對象,所以對象在記憶體中如何存放同樣適用於數組;

正如我們都知道的,java運行時資料區包括堆,JVM棧和其它。如下代碼是一個小例子,那麼就讓我們來看看數組和它的引用在記憶體中是如何存放的.

class A {    int x;    int y;}...public void m1() {    int i = 0;    m2();}public void m2() {     A a = new A();}...

如上代碼,讓我們來調用方法m1,看看發生了什麼:

當m1被調用的時候,棧幀Frame-1被建立並push到棧中,同時局部變數i也在棧幀Frame-1內建立。

然後,m2方法在m1方法內部被調用,棧幀Frame-2被建立並push到棧中,在m2方法中,一個新的對象A在堆中被建立,而它的引用則被put到棧幀Frame-2裡;

現在記憶體中堆和棧的大致情況如:

數組同樣是對象,所以數組和對象以及引用在記憶體中的分布如上所示;

 

譯文連結:http://www.programcreek.com/2013/04/what-does-a-java-array-look-like-in-memory/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.