首页 > 编程知识 正文

java中堆和栈的区别,照片合的成和堆栈有什么区别

时间:2023-05-04 21:35:38 阅读:31235 作者:2847

在讨论堆和堆栈之前,让我们先谈谈虚拟机(JVM )的内存划分。

Java程序在运行时必须打开空间,任何软件在运行时都必须在内存中打开空间,在Java虚拟机运行时也必须打开空间。 JVM运行时在内存中创建内存区域,启动时在自己的内存区域中进行更细的分隔。 虚拟机中每个内存的处理方法不同,因此需要单独管理。

JVM内存被分割成5张。

1 .寄存器

2 .本地方法区

3 .方法区

4 .堆栈内存

5 .积累内存。

让我们集中讨论堆栈和堆栈:

堆栈存储器:堆栈存储器首先是内存区域,存储的都是局部变量,方法中定义的都是局部变量,for循环内部定义的也是局部变量,加载函数后再行变量有自己的范围,离开范围后变量就会被释放。 由于局部变量的生命周期短,堆栈内存将快速更新。

堆内存:存储数组和对象。 实际上,数组是一个对象。 new创建的所有内容都位于堆中,而堆中存储的是实体(对象)。 实体用于封装数据,封装多个(实体的多个属性)。 如果一个数据消失,该实体仍可使用,从而随时释放堆,但堆栈不同。 存储在堆栈中的是一个变量。堆中的实体不会被释放,但会被视为垃圾。 Java有垃圾回收机制,不定期收集。

现在,我们将使用图详细说明堆和堆栈。

例如,主函数语句int [] arr=new int [3]; 内存中是如何定义的:

主函数先进堆栈为堆栈定义变量arr,然后给arr赋值,但右边不是具体值,而是实体。 实体在堆中创建,堆中首先用new关键字打开空间,内存存储数据时用地址表示。 地址是连续的二进制文件,为该实体分配内存地址。 数组有索引,在堆内存中生成数组这个实体后,每个区域都进行缺省初始化。 这是堆内存的特点,无法使用未初始化的数据,但可以在堆中使用。 已初始化,但不在堆栈上。 )。 初始化的值因类型而异。 在堆和堆栈中创建变量和实体。

那么,堆和栈是怎么联系起来的呢?

为堆分配地址并将堆地址分配给arr时,arr通过地址指向数组。 因此,如果arr想要处理数组,它将通过地址,而不是直接分配实体。 这样的我们不叫他基本数据类型,而是叫他参考数据类型。 称为arr,它引用堆内存中的实体。 (可以理解为c或c的指针。 Java从c成长为c,优化了c ) ) )。

int [] arr=null时;

arr不做任何指向。 null的作用是取消引用数据类型的指向。

如果实例未按引用数据类型指示,则不会释放到堆内存中,而是将其视为垃圾,并在不定期的时间自动回收。 (c中没有,因为Java有自动回收机制。 Java在内存管理方面优于c,因为程序员需要手动回收,如果不回收,则会堆积到内存已满。 自动回收机制(程序)自动监测堆中是否存在垃圾,有则自动进行垃圾回收的动作,但何时回收并不一定。

堆栈和堆栈的区别很明显:

1 .堆栈存储器存储局部变量,堆存储器存储实体

2 .堆栈内存更新速度快于堆内存。 因为局部变量的生命周期短;

3 .存储在堆栈内存中的变量生命周期结束时释放,存储在堆栈内存中的实体由垃圾回收机制不定期回收。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。