java數組中的內存分析

  • 內存簡介

內存是計算機中的一個重要原件,是一種臨時存儲區域,作用是運行程序。我們程序員編寫的程序是存放在硬盤中的,但是在硬盤中的程序它是不會運行的,必須放進內存中才能運行,每個程序運行完畢後會自動清空內存。

  • 先看下Java中的數組內存圖

從上圖我們可以看到,在一個硬件中(電腦),包含了系統,系統中包含了內存,我們所有的程序都是運行在系統的內存中,如微信,QQ,JVM虛擬機.

  • Java虛擬機的內存劃分

爲了提高運算效率,Java虛擬機就對空間進行了不同區域的劃分,因爲每一片區域都有特定的處理數據方式和內存管理方式。

  • JVM的內存劃分:

區域名稱 功能
寄存器 CPU在運算,用於保存線程下一個要執行的命令
本地方法棧 JVM在使用操作系統的時候使用
方法區 存儲編譯後的class文件
堆內存 存儲對象或者數組,只要是new出來的,全部都存儲在堆內存
方法棧 方法運行時的內存,比如main方法運行,進入方法棧中執行

我們作爲Java攻城獅,需要重點關注的只有三個地方,方法棧,方法區,和堆內存,這三個內容需要我們重點關注!!!

一個數組在內存中的內存圖分析以上方法執行,輸出的結果是[I@38cccef,這個是什麼呢?是數組在內存中的地址。new出來的內容,都是在堆內存中存儲的,而方法中的變量arr保存的是數組的地址。

輸出arr[0],就會輸出arr保存的內存地址中數組中0索引上的元素


 
public class Demo01 {

public static void main(String[] args) {

int[] arr = new int[3];

System.out.println(arr); // [I@50cbc42f

arr[1] = 2;

System.out.println(arr[1]);

}

}

  • 兩個數組內存圖


 
package com.mobaijun;
public class Demo2 {
public static void main(String[] args) {
       int[] arr1 = new int[2];
       int[] arr2 = new int[3];
       System.out.println(arr1);
       System.out.println(arr1[0]);
       System.out.println(arr1[1]);
       System.out.println(arr2[0]);
       System.out.println(arr2[1]);
       System.out.println(arr2[2]);
       // 給arr1數組的索引爲0元素賦值100
        arr1[0] = 100;
        // 給arr2數組的索引爲0元素賦值200
       arr2[0] = 200;
       System.out.println("-----------");
       System.out.println(arr1);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
}
}


 

  • 兩個變量指向一個數組

兩個變量都指向了同一個數組,無論通過哪個變量操作數組,對方都會受到影響。


 
package com.mobaijun;

public class Demo3 {

public static void main(String[] args) {

int[] arr = new int[3];

arr[0] = 100;

arr[1] = 200;

arr[2] = 300;

System.out.println(arr);

System.out.println(arr[0]);

System.out.println(arr[1]);

System.out.println(arr[2]);





        // 定義數組變量arr2,將arr的地址賦值給arr2

       // arr和arr2指向堆中同一個數組

        int[] arr2 = arr;

arr2[0] = 111;

arr2[1] = 222;

arr2[2] = 333;

System.out.println(arr);

System.out.println(arr[0]);

System.out.println(arr[1]);

System.out.println(arr[2]);

System.out.println(arr2);

System.out.println(arr2[0]);

System.out.println(arr2[1]);

System.out.println(arr2[2]);

}

}

結語:Java虛擬機內存圖對於理解Java程序非常的關鍵,大家應該熟悉數組代碼的內存機制,對於學習Java技術幫助很大。

補充:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章