Java中stack和heap区别说明
下文笔者讲述Java中stack和heap的区别简介,如下所示
stack和heap简介
stack与heap是Java中两种不同的存储数据的区域
两者的区别在于
它们的数据结构不同
及它们的生命周期不同
Stack(栈)
stack(栈)用于存储局部变量和方法调用
每当方法被调用时
它会在stack上创建一个新的frame(框架)
包含该方法的参数和变量
当方法执行完成并返回时,该frame也被从stack上移除。
stack是一种LIFO后进先出的结构
由于栈空间是有限的
所以当stack空间被用完时
将会抛出StackOverflowError。
使用stack计算阶乘
public class Main {
public static void main(String[] args) {
System.out.println(factorial(6));
}
public static int factorial(int n) {
if (n == 0) {
return 1;
}
return n * factorial(n-1);
}
}
当运行factorial(6)时
会在stack上创建6个frame
每个frame都包含一个int变量n
当递归调用到最后一个factorial(0)时
stack上的frame开始被pop(弹出)
并计算每个frame的factorial值直到完成。
Heap (堆)
heap(堆)
用于存储Java对象的区域
当我们使用new关键字创建一个对象时
该对象被存储在heap上
并返回一个指向该对象的引用
heap上的对象可以被多个线程共享
及在程序任何位置被使用
当heap空间用尽时,Java会抛出OutOfMemoryError。
例
public class Main {
public static void main(String[] args) {
Person p = new Person("maomao", 18);
System.out.println(p.getName());
p.setName("gougou");
System.out.println(p.getName());
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


