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

    xiaoxiao2023-10-26  149

    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号元素 在内存中的分布详解:(以两个数组在内存中的分布为例)

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

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

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

    int[] array = new int[3];

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

    最新回复(0)