2.2 JVM中堆和栈的区别

JVM中堆和栈的区别

2.2 JVM中堆和栈的区别

  • 堆和栈(虚拟机栈)是完全不同的两块内存区域,栈是线程私有的,堆是线程共享
    的。二者之间最大的区别就是存储的内容不同:堆中主要存放对象实例。栈(局部变量表)中主要存放各种基本数据类型和对象的引用。
  • 从作用上来说,栈是运行时的单位,而堆是存储的单位。栈解决程序的运行问题,即程序如何执行,如何处理数据。堆解决的是数据存储问题,即数据怎么放、放在哪。在Java 中每个线程都会有一个线程栈与之对应,因为不同的线程执行逻辑不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程相关的信息,比如局部变量、程序运行状态、方法返回值等;而堆只负责存储对象信息。