今天开始学java(七)关于内存划分

java的内存需要化身成为五个部分:
1、栈内存:存放的都是方法中的局部变量。方法的运行一定是在栈当中
局部变量:方法的参数,或者是方法{}内部的变量
作用域:一旦超出作用域,立刻从栈内消失。
2、堆内存:凡是new出来的东西,都在堆当中
堆内存里面的东西都是一个地址值:16进制
堆内存中的数据都有默认值,规则:
如果是整数 默认为0
如果是浮点数 默认为0.0
如果是字符 默认为‘/u0000’
如果是布尔值 默认为false
如果是引用类型 默认为null
3、方法区:存储.class相关信息,包含方法的信息。
4、本地方法栈:与操作系统相关
5、寄存器:与CPU相关

举一个例子:
在这里插入图片描述方法区中.class最为主要保存的就是方法的信息,原方不动的把方法的第一行,放到方法区中
作为main方法,为程序的起点,首先在方法区中看看是什么方法,然后把方法信息加载到栈内存当中,并且为main方法在栈内存当中开辟一块内存空间,这个动作叫进入栈内存,main方法进入之后会有一个专属的方框,回头看图片中的代码,在main方法中,第一行是声明了一个array数组,这个数组就是一个局部变量,变量可以是基本类型也可以是引用类型。
而赋值之后的new是在堆内存当中,数组长度为3,索引编号为0,1,2,默认值都为0,地址值为十六进制0x什么什么(假如是0x666),而这个0x666就会被赋值放到array名称当中,就是说new的数组在堆当中,而地址名称是在栈当中的,栈中存储的是地址值,根据地址值就可以找到堆中的数组。
所以在这里直接输入array,输出的就是地址值,而访问元素时输出的就是数组中的元素所对应的值。

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