JAVA 堆和栈

作者: 乘风破浪的姐姐 | 来源:发表于2018-12-12 17:56 被阅读9次

1、堆和栈的优缺点
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。 栈数据可以共享

堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢

2、堆和栈的存储
栈内存用来存放在函数中定义的一些基本类型的变量和对象的引用变量,如对象的行为(方法)即运行逻辑。

堆内存用来存放由new创建的对象和数组。把对象拆开,你会发现,对象的属性其实就是数据,存放在堆中; 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。

引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。

3、举例说明

例如 String str = new String("test");

这条语句,它的执行过程是先在堆上new 了一个值为"test"的String对象,然后栈上又新建一个str

来指向上面新建的"test"对象,即str是"test"的引用。

所以Java中对象的新建都是在堆上进行的,对象的引用一般都是在栈上。

一般每个方法的调用都会独立有一个栈来保存str这样的对象的引用变量,在方法返回后,栈会清空,所以引用变量会被清空掉,这是堆上的对象。

如果没有其他的引用变量引用它,就会被Gc在某个合适的时候gc掉。

image.png

更详细的说明请参考文章:
https://blog.csdn.net/dreamthen/article/details/26570863

相关文章

  • 10.11java中的堆和栈

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

  • Java中的堆和栈

    堆和栈都是Java在Ram中存放数据的地方,Java自动管理堆和栈,开发者不能直接地设置堆或栈。 Java的堆是一...

  • JVM内存分配策略 和 内存回收策略

    java 内存分配基于两种,堆 和 栈。 1.栈 和 堆 java栈java栈的分配是和线程绑定在一起的,当我们创...

  • JVM内存模型

    Java内存模型把Java虚拟机内部划分为线程栈和堆。 Java 内存中堆和栈有什么区别: Stack栈是存放方法...

  • [Java 编程思想]第二章

    1. java是基于C++ 2. 堆和栈的区别 栈和堆都是java用来在Ram中存放数据的地方,java自动管理栈...

  • Android内存管理及内存泄漏分析(一)

    1、堆和栈 要了解Android的内存,必须先从Java的堆和栈看起,我们先看看《Think In Java》中对...

  • java栈和堆

    java中变量在内存中的分配 1、类变量(static修饰的变量):在程序加载时系统就为它在堆中开辟了内存,堆中的...

  • JAVA 堆和栈

    1、堆和栈的优缺点栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存...

  • Java栈与栈上分配

    一. java栈: java栈是一块线程私有的内存空间。如果说,java堆和程序数据密切相关,那么java栈就是和...

  • Java数据类型和存储的关系及String类型存储详述

    一.Java存储数据的地方:栈(stack)与堆(heap): 与C++不同,Java自动管理栈和堆,程序员不能直...

网友评论

    本文标题:JAVA 堆和栈

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