java 内存分布 之 数组在内存中的分布

5个部分
1.栈(Stack) 存放的是方法中的局部变量, 方法的运行一定要在栈当中运行喔!

局部变量:方法的参数,或者是方法()内部的变量.
作用域:一旦超出作用域,立刻从栈内存中消失.

2.堆(Heap)
凡是new出来的东西,都在堆当中.

堆内存中的数据,都有默认值,规则:

数据类型 默认值
整数 默认值为0
浮点数 默认值为0.0
字符 默认值为\u0000
布尔 默认值为false
引用类型 默认值为null

3.方法区(Method Area):存储.class相关信息,与操作系统无关

4.本地方法栈(Native Method Stack):与操作系统相关
5.寄存器(pc Register):与cpu相关

数组中内存的分布:

主要是在内存中的三个部分,栈,堆和方法区.
看下边的一幅图: array数组里有三个元素,0号元素,1号元素,2号元素
java 内存分布 之 数组在内存中的分布_第1张图片
在内存中的分布详解:(以两个数组在内存中的分布为例)

首先:方法区有一个方法:将这个方法放在栈中.

public static void main(String[] args) {}

定义一个新的数组,可以发现左边是变量,右边是new 出来的东西.
根据上边说的,变量放在栈里,new出来的东西需要开辟一片内存,所以放在堆里.

int[]  array = new int[3];

在堆中,a数组有3个元素,所以a数组分成三份,其中0X666是地址值,地址值放在左边栈中对应数组里(这个地址值就相当于一个地址,可以根据这个地址找到相应的元素)
java 内存分布 之 数组在内存中的分布_第2张图片
当给一个元素赋值的时候,栈中的数组会根据地址值找到堆中相应的数组,根据索引找到具体的元素,然后新的赋值将初始值覆盖.

你可能感兴趣的:(JAVA)