首页 > 编程知识 正文

数据结构堆和栈的区别,栈内存和堆内存的特点

时间:2023-05-05 12:26:46 阅读:25415 作者:2004

函数中定义的一些基本类型的变量和对象的引用变量被分配给函数的堆栈内存。

在代码块中定义变量后,Java会在堆栈中为该变量分配内存空间。 当超出变量的范围时,Java会自动释放分配给该变量的内存空间,该内存空间可以立即用于其他用途。

堆内存用于存储由new创建的对象和数组。

分配给堆的内存由Java虚拟机的自动垃圾收集器管理。

在堆中生成数组或对象后,还可以为堆栈定义特殊变量,以使堆栈中此变量的值等于堆内存中数组或对象的起始地址。 堆栈中的此变量将成为数组或对象的引用变量。

引用变量与赋予数组或对象的名称相同。 稍后可以在程序中使用堆栈中的引用变量访问堆中的数组或对象。

在java中将变量分配给内存

1、类变量(静态限定变量)程序加载时系统在堆中打开内存,堆中的内存地址存放在堆栈中便于快速访问。 静态变量的生命周期--持续到“系统”关闭

2、实例变量: cmdkfd使用java关键字new时,系统对堆的开拓不一定是连续的空间,而是分配给变量(如类实例),然后基于零散堆内存的地址实例变量的生命周期--如果对实例变量的引用丢失,它将被垃圾收集器(GC )列入可回收的“列表”中,但并不立即释放堆中的内存

3、局部变量:局部变量声明在某个方法或某个代码段中,执行时在堆栈中打开内存。 局部变量脱离范围时,内存立即释放

附件: java的内存机制

Java将内存分为堆栈内存和堆内存两种。 函数中定义的几个基本类型的变量和对象的引用变量被分配给函数的堆栈内存,当在代码块中定义变量时,Java在堆栈中为该变量分配内存空间,当超出变量的范围时,Java自动将该变量分配给该变量

堆内存用于存储由new创建的对象和数组,分配给堆的内存由Java虚拟机的自动垃圾收集器管理。 在堆中生成数组或对象后,还可以为堆栈定义特殊变量,以使堆栈中此变量的值等于堆内存中数组或对象的起始地址。 堆栈中的此变量将成为数组或对象的引用变量,以后可以通过编程方式使用堆栈中的引用变量访问堆中的数组或对象。 引用变量与赋予数组或对象的名称相同。 参照变量是普通变量,在定义时分配给堆栈,参照变量在程序运行到该范围外后释放。 数组和对象本身被分配给堆,即使程序运行在包含使用new生成数组或对象的语句的代码块之外,也不会释放数组和对象本身占用的内存。 当引用变量不指向它时,数组和对象会变成垃圾,不可用,但它们仍然占用内存空间,并在随后的不确定时间被垃圾收集器接受。

这也是Java占用内存的原因。 实际上,堆栈中的变量指向堆内存中的变量。 这就是Java中的指针。

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