本节主要内容:
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的全拼。很好记哦~)
网友评论