一.栈的作用
1.
栈的存放
- 局部变量
- 堆中对象的引用(对象在堆内存中的地址)
一个对象的大小无法估计,但是一个对象的引用只占4byte
基本数据类型的变量没有什么存储区域的说法,内存中分为两类进行存储
- 全局变量存储在堆中
- 局部变量存储在栈中
2.
栈的属性
- 栈的创建方式
- 每条线程都有一个独立的栈,在线程创建时创建
二.栈的操作
1. 栈的存取顺序是先进后出,后进先出,就像是手枪弹夹,后进去的先打出来;
2. 代码模拟
public class SQ {
//先规定栈的最大容量
Object[] objs ;
//获取当前栈容量
int size;
public SQ(int MaxLen){
this.objs = new Object[MaxLen];
}
//进行压栈操作(就是在栈中存入内容)
public void push(Object x){
System.out.println("压栈操作,压入内容为"+( objs[size++] = x)); //先给当前指针位置赋值,然后指针变大
}
//弹栈操作
public void popu() {
System.out.println("弹出栈顶内容:"+objs[size-1]);//获取栈顶数据,然后弹出栈中,栈容量减少
size--;
}
//获取栈内所有数据
public void getAllStack() {
System.out.println("栈顶到栈底所有数据为");
for (int i = size-1; i >= 0; i--) {
System.out.println(objs[i]+" ");
}
}
public static void main(String[] args) {
SQ s = new SQ(20);
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.getAllStack();
s.popu();
s.popu();
s.getAllStack();
}
}
output:
压栈操作,压入内容为1
压栈操作,压入内容为2
压栈操作,压入内容为3
压栈操作,压入内容为4
栈顶到栈底所有数据为
4
3
2
1
弹出栈顶内容:4
弹出栈顶内容:3
栈顶到栈底所有数据为
2
1
三.栈和栈帧
1.
栈帧的作用和定位
- java栈以帧为单位来保存线程的状态
- jvm对java栈只进行两种操作
- ----以帧为单位的压栈和弹栈
2.局部变量表
局部变量,他是class文件里面的内容,加载后被传递到方法区,参见
Class类详解
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">