内存模型:
栈(stack):存储局部变量,方法的执行区 ----------------------- 存放在栈内存中的变量是没有初始值的。栈:先进后出结构;
堆(heap):实例化(new)的对象(变量 )------------------- 存储在堆内存中的元素是有初始值的;堆:完全二叉树结构;
基本数据类型:初始值就是默认值;
引用数据类型:初始值为 null。
注:程序在执行过程中会将main方法加载到栈内存中,main方法中的局部变量也存储在栈内存中(无初始值)。在实例化对象的同时会在堆内存开辟一部分空间,并将地址值赋值给局部变量。之后通过地址指针访问堆内存中的元素。
面向对象的内存模型:
栈(stack): 方法的执行, 局部变量, 没有初始值;
堆: new实例化出来的东西 ,有初始值:基本数据类型初始值就是默认值,引用数据类型初始值为null;
方法区:
class 区: 所有字节码文件(.class 文件)。类加载的时候会把相关字节码文件加载到class区中;
static区: 类加载的时候会把用static修饰的东西存入到静态区。