1.栈(Stack):存放的都是方法中的局部变量 。方法的运行一定要在栈当中。
局部变量:方法的参数,或者是方法{}内部的变量
作用域:一旦超出作用域(也就是{}),立刻从栈内存当中消失。
2.堆(Heap):凡是new出来的东西,都在堆当中。
堆内存里的东西都有一个地址值:16进制
堆内存里的数据,都有默认值。规则:
如果是整数 默认为0
如果是 浮点数默认为0.0
如果是字符 默认 ‘\u0000’
如果是布尔 默认为false
如果是引用类型 默认为null
3.方法区(Method Area):储存.class相关的信息,包含方法的信息
4.本地方法栈(Native Method stack)与操作系统相关。
5寄存器(pc Register):与CPU相关
下面为大家举个例子
new int[3] 要记住 只要new出来的东西都放在堆中 并且生成一个地址如0x666
栈(Stack):存放的都是方法中的局部变量 。方法的运行一定要在栈当中。
int[] array 是方法中的变量 和堆中的地址相同 因为要栈中的变量要通过地址在堆中查找相同地址的内存空间。
mian(String[] args) mian方法是程序的入口,也只有mian方法作为程序的入口
方法区(Method Area):储存.class相关的信息,包含方法的信息。.class里面就包含了mian方法。
当我们改变数组当中的元素时 array[1] =20; array[1] j就会找到 int[] array ,int[] array会根据地址找到堆中相同地址的内存空间 ,根据下标找到对应的数据,把下标为1的这块内存里面的数据改成20;这是一个方法执行过程中java内存中发生的变化。