1.内存分配
分配策略: Java 程序运行时的内存分配策略有三种,分别是静态分配、栈式分配和堆式分配,三种方式所使用的内存空间分别是静态存储区(方法区)、栈区和堆区
静态存储区(方法区):存放静态变量,里面有常量池,在程序编译器就已经分配好,在整个程序运行期间都存在
栈区: 方法体内的局部变量(包括基础数据类型、对象的引用)都在栈上创建,并在方法执行结束时。这些局部变量所持有的内存将会自动被释放。基于寄存器(CPU)运行速度很快
堆区:又称动态内存分配,通常就是指程序运行时直接
new 出来的内存,也就是对象的实例,这部分「内存」在不使用时将会被 Java 垃圾回收器来负责回收。
注意: gc回收的堆内存
局部变量i2和引用变量sa都存于栈内存中,但sa的实例(对象)存于堆内存中
mSa的引用存于栈内存中,但是成员变量i1和mSa的实例存于堆内存
局部变量的基本数据类型和引用存储于栈中,引用的对象实体存储在堆中 —— 因为他们属于方法中的变量,生命周期随方法而结束
成员变量全部存储于堆中(包括基本数据类型,引用和引用的对象实体)—— 因为它们属于类,类对象终究是要被 new 出来使用的
2.垃圾回收机制