从零学java笔录-第23篇数组2java中内存分配及棧、堆的区别

本节主要内容:

1:java中内存分配及棧、堆的区别

2:本节总结&下节预告

本文出处:《凯哥陪你学系列之java基础篇.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

欢迎浏览凯哥个人网站:www.kaigejava.com (凯哥java的全拼。很好记哦~)

你可能感兴趣的:(从零学java笔录-第23篇数组2java中内存分配及棧、堆的区别)