本節主要內容:
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];這個在棧、堆中存儲模型
說明:
根據棧的定義,我們可以知道main方法是局部的。
所以main方法應該在棧中。
而 int [] arr 是在main方法中。所以也在棧區域中。
又因為,jvm最先找main方法。所以main方法被壓棧,到棧區域最下面了。
根據堆的定義,我們知道 new int[5] 這個應在堆區域中。
對應的地址是0x0011 索引分別是 0 、1、2、....
系統給定的默認初始值都是0
在將堆中地址引用指向棧中。所以當我們打印出arr的時候,其實就是打印出,該
數組在堆中的地址值。
在回顧上節課:
在syetem.out.println(arr)其實打印的就是其對應在內存中的地址。
本節總結:
通過本節學習,需要掌握的:
1:堆、棧的區別及分別存放的是什麼數據
2:理解堆、棧在內存中的方式
下節預告:
一維數組在動態賦值在內存中圖解。
相關推薦
'java中的棧幀'
"棧幀數據結構棧幀(Stack Frame)是用來支持虛擬機進行方法調用和方法執行的數據結構,它是虛擬機運行時數據區中的虛擬機棧的棧元素。棧幀(Stack Frame)存儲了方法的局部變量表、操作數棧、動態連接、和方法返回地址、額外的附加信息。每個方法在執行的同時,都會創建...
你真的瞭解Java中'=='和equals()的區別?(文末附java教程)
“判斷兩個事物是否相等”,是編程中最常見的操作之一,在Java中,判斷是否相等有兩種方法,一種是使用“==”判斷符,另一種是使用“equals()”方法,...
Java堆和棧看這篇就夠
前言堆和棧的概念可以說是Java開發底層的一大問題了。今天和一個復旦的哥們在討論基本數據類型在堆棧中的存儲問題,以及明白了這個問題對於用戶(程序員)來說有...
Java中類型參數“T”和無界通配符“?”的區別
專注於Java領域優質技術號,歡迎關注作者:JavaEdge首先要區分開兩種不同的場景:聲明一個泛型類或泛型方法類型參數“<T>”主要用於第一...
在Java中去掉一個數組中的重複元素,你知道幾種?
記得有一次筆者去面試的時候,面試官曾問過一個問題,當一個數組中存在重複元素的時候,有多少種比較好的辦法去掉數組中的重複元素? 客官,你知道幾種? 現在筆...
從零學java筆錄-18篇 嵌套循環練習二
本篇主要內容:1: 上節打印三個10X10的矩形2:打印直角三角形3:打印九九乘法表4:打印正三角形一:打印三個10X10的矩形分析:在上一篇中我們講到了...
java中接口與抽象類的區別
寫在前面這個問題是好多IT碼農在面試中被問到的問題,但往往卻不能夠給出一個比較全面完美的回答,那麼首先來說說為什麼這個問題這麼容易問到?接口、抽象類與面向...
Java中棧(stack)和堆(heap)附實例詳解
編程是一種單調的生活,因此程序員比普通人需要更多的關懷,更多的友情。喜歡右上角請 關注,謝謝!前言按照編譯原理的觀點,程序運行時的內存分配有三種策略,分別...
推薦中...