|名词定义|
栈又称堆栈,是操作系统在建立某个进程或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有先进后出的特性。
位于通用RAM中,但通过它的“堆栈指针”可以从处理器那里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序的时候,JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,故只有某些Java数据存储在堆栈(特别是对象引用)中,而JAVA对象不在栈中存储。
栈内存:保存的是一块堆内存的地址,即:通过地址找到堆内存,而后找到对象内容。但是为了分析简化起见,可以简单地理解为:对象名称保存在了栈内存之中。
栈分区内容
1.一些基本类型的变量(int, short, long, byte, float, double, boolean, char)和对象句柄,如:在函数中定义的一些基本类型的变量和对象的引用变量。
2.方法的形参 直接在栈空间分配,当方法调用完成后从栈空间回收。
特点
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
|参考资料|
[1] https://www.jianshu.com/p/bfa5337ef59e
[2] https://blog.csdn.net/jianesrq0724/article/details/80309690