美文网首页
堆和栈的区别

堆和栈的区别

作者: 大海孤了岛 | 来源:发表于2017-03-18 17:18 被阅读23次

在方法体内定义的(局部变量)一些基本类型的变量和对象的引用变量都是在方法的栈内存中分配的。当在一段方法块中定义一个变量时,Java 就会在栈中为该变量分配内存空间,当超过该变量的作用域后,该变量也就无效了,分配给它的内存空间也将被释放掉,该内存空间可以被重新使用。

堆内存用来存放所有由 new 创建的对象(包括该对象其中的所有成员变量)和数组。在堆中分配的内存,将由 Java 垃圾回收器来自动管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,这个特殊的变量就是我们上面说的引用变量。我们可以通过这个引用变量来访问堆中的对象或者数组。

举个例子:

public class Sample {
    int s1 = 0;
    Sample mSample1 = new Sample();

    public void method() {
        int s2 = 1;
        Sample mSample2 = new Sample();
    }
}

Sample mSample3 = new Sample();

Sample 类的局部变量 s2 和引用变量 mSample2 都是存在于栈中,但 mSample2 指向的对象是存在于堆上的。 mSample3 指向的对象实体存放在堆上,包括这个对象的所有成员变量 s1 和 mSample1,而它自己存在于栈中。

结论:

局部变量的基本数据类型和引用存储于栈中,引用的对象实体存储于堆中。—— 因为它们属于方法中的变量,生命周期随方法而结束。

成员变量全部存储与堆中(包括基本数据类型,引用和引用的对象实体)—— 因为它们属于类,类对象终究是要被new出来使用的。

引用于--栈与堆的区别

相关文章

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • java中栈内存和堆内存有什么区别

    java中栈内存和堆内存有什么区别 栈内存和堆内存的区别: 1、栈内存用来存放基本类型的变量和引用变量,堆内存用来...

  • 栈和堆的区别

    堆栈空间分配区别 1、栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的...

  • 堆和栈的区别

    作者:思羽链接:https://www.zhihu.com/question/19729973/answer/13...

  • 栈和堆的区别

    最主要的区别: Java中所有由类实例化的对象(new)和数组都存放在堆内存中,无论是成员变量,局部变量,还是类变...

  • 堆和栈的区别

    堆和栈的区别(内存和数据结构) 在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于...

  • 堆和栈的区别

    (JVM(虚拟)内存中的堆和栈)堆和栈都是内存中的一部分,有着不同的作用,而且一个程序需要在这片区域上分配内存。 ...

  • 堆和栈的区别

    非原创,学习使用。 本文转自:https://blog.csdn.net/hairetz/article/deta...

  • 堆和栈的区别

    一.堆和栈的概述栈:编译器自动分配内存,存放参数值以及局部变量的值,类似于数据结构中的栈,使用完成后由系统自动回收...

  • 堆和栈的区别

    一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编...

网友评论

      本文标题:堆和栈的区别

      本文链接:https://www.haomeiwen.com/subject/iwzunttx.html