Java的内存划分
Java运行的内存一共分为五个部分:
- 栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在堆栈中运行。
- 堆(Heap):凡是new出来的东西都在堆中。
- 方法区(Method Area):存储.class相关的信息,包含方法的信息。
- 本地存储栈(Native Method Stack):与操作系统相关。
- 寄存器(pc Register):与CPU相关。
概念解读
栈相关
1、局部变量:方法的参数,或者是方法{}内不的变量。
2、作用域:当程序的执行一旦离开方法的作用域,作用域中的局部变量就会立即从栈内存中消失。
堆相关
1、堆内存里面的东西都有一个16进制的地址值。
2、堆内存里面的数据(比如数组),都有默认值。规则:
- 整数------------------------0
- 浮点数---------------------0.0
- 字符------------------------’\u0000’
- 布尔------------------------false
- 引用类型------------------null
3、.class的相关信息,比如:方法的名字、方法的返回值类型、方法的参数。
方法的执行在内存中的过程
首先是执行方法区里面记录的main方法,当执行main方法的时候,操作系统就会再栈内存中为main方法开辟一块栈空间,这块内存空间里面存储的就是main方法的参数以及作用域里面的局部变量。假如说作用域内正好有一个局部变量是一个数组,数组的变量名就是一个变量,里面存储的是数组在内存中存储的16进制地址值,这个地址值就是指向存储在堆中的这个数组的数据。