Java中stack和heap区别说明

重生 Java经验 发布时间:2023-12-12 21:36:14 阅读数:11651 1
下文笔者讲述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;
  }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202312/17023882197436.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者