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; } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。