從零學java筆錄-第23篇 數組2 java中內存分配及棧、堆的區別

編程語言 Java CPU 技術 凱哥java 2017-06-18

本節主要內容:

1:java中內存分配及棧、堆的區別

2:本節總結&下節預告

本文出處:《凱哥陪你學系列之java基礎篇》中第23篇 數組2 java中內存分配及棧、堆的區別

java內存區域分類:

1: 棧(需要掌握的)

存儲局部變量的

局部變量;

定義在方法聲明上和方法中的變量。比如在main方法聲明的int i =3;

2:堆(需要掌握的)

存儲new出來的數組或是對象

3:防範區

面向對象部分講解

4:本地方法區

和系統相關

5:寄存器

給CPU使用的

解釋:

int [] arr = new int [5];這個在棧、堆中存儲

說明:

棧的特點:先進後出。可以聯想到彈夾中的子彈。

彈夾中最先放進去的子彈,最後出槍膛。

int [] arr = new int [5];這個在棧、堆中存儲模型

從零學java筆錄-第23篇 數組2 java中內存分配及棧、堆的區別

說明:

根據棧的定義,我們可以知道main方法是局部的。

所以main方法應該在棧中。

而 int [] arr 是在main方法中。所以也在棧區域中。

又因為,jvm最先找main方法。所以main方法被壓棧,到棧區域最下面了。

根據堆的定義,我們知道 new int[5] 這個應在堆區域中。

對應的地址是0x0011 索引分別是 0 、1、2、....

系統給定的默認初始值都是0

在將堆中地址引用指向棧中。所以當我們打印出arr的時候,其實就是打印出,該

數組在堆中的地址值。

在回顧上節課:

從零學java筆錄-第23篇 數組2 java中內存分配及棧、堆的區別

在syetem.out.println(arr)其實打印的就是其對應在內存中的地址。

本節總結:

通過本節學習,需要掌握的:

1:堆、棧的區別及分別存放的是什麼數據

2:理解堆、棧在內存中的方式

下節預告:

一維數組在動態賦值在內存中圖解。

相關推薦

推薦中...