1.内存划分
java在运行时,内存划分和管理
java runtime data area : java运行时数据区域,又叫JVM内存
静态区/方法区 : 用来存放一些静态资源文件,例如class文件,方法调用之前也是保存在这里的
VM栈 : 也叫栈内存,用于执行方法的
栈内存 是以栈数据结构为模型,开辟的一段内存空间
栈数据结构 : 先进后出,比如弹夹
栈的构成 栈空间 : 是一个以栈数据结构为模型开辟的一段内存空间(弹夹)
栈帧 : 栈内存中,每一个栈元素就叫栈帧(子弹)
栈底元素 : 第一个放进去的栈帧
栈顶元素 : 最后一个放进去的栈帧
栈操作 :
压栈 : 就是指把元素放到栈空间中的过程(装弹)
弹栈 : 就是指把元素从栈空间中弹出的过程(开枪)
方法在栈内存中执行,就意味着,调用方法,会在栈内存中进行压栈
方法执行完成,就意味着,在栈内存中进行弹栈
本地方法栈:和栈内存一样,用于执行本地方法,比如hashCode等
堆内存 : 用来保存对象相关数据的
2.递归
public static void main(String[] args) {
int n = 100;
int result = sum(n);
System.out.println(result);
result = sum1(3);
System.out.println(result);
}
public static int sum1(int n) {
if (n == 1) {
return 1;
} else {
return n + sum1(n - 1);
// return 5 + sum1(4); n = 5
}
}
// 需求 : 计算1~N的累加加和
public static int sum(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
// 由于没有终止条件,一直进行压栈,导致栈内存移出
// Exception in thread "main" java.lang.StackOverflowError
public static void m1() {
m1();
}