b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

解决方案:堆和堆栈在内存中有什么区别?

电脑杂谈  发布时间:2020-09-20 05:01:41  来源:网络整理

堆和栈在内存中的区别是什么_数据结构和内存中堆和栈的区别_堆内存与栈内存的区别

(答案提示:您可以从两个方面回答:数据结构和实际实现)

java中有两种类型的内存,一种是堆内存,另一种是堆栈内存。

堆栈内存

函数中定义的变量和对象引用变量的基本类型在函数的堆栈存储器中分配。

在代码块中声明变量时,Java将在堆栈存储器中为此变量分配存储空间。当超出变量的范围时,Java还将自动释放为该变量分配的空间,并且该回收的空间可立即用于其他目的。

堆内存

数据结构和内存中堆和栈的区别_堆和栈在内存中的区别是什么_堆内存与栈内存的区别

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

在堆内存中分配的内存空间由java虚拟机的自动垃圾收集器管理。

在堆中生成数组或对象之后,还可以在堆栈中定义一个特殊变量。变量的值等于堆存储器中数组或对象的第一个地址,并且该堆栈中的特殊变量也为它成为数组或对象的引用变量。将来,您可以使用堆栈存储器中的引用变量来访问程序中堆存储器中的数组或对象。参考变量等效于数组或对象的别名或代码名。

当没有指向它的引用变量时,数组和对象成为垃圾,它们无法使用,但是它们仍然占用堆内存空间,然后在不确定的时间内,java虚拟机自动垃圾回收器回收,这也是Java程序占用大量内存的原因。

java中的内存分配策略以及堆和栈的比较

1.内存分配策略

数据结构和内存中堆和栈的区别_堆和栈在内存中的区别是什么_堆内存与栈内存的区别

根据编译原理的观点,程序运行时有三种内存分配策略,即静态,堆和堆栈。

(1)静态存储分配:是指在编译时可以确定每个数据对象在运行时的存储空间需求,因此在编译时会为其分配固定的存储空间。这种分配方法要求程序代码不能具有可变的数据结构(例如,可变数组),并且不允许嵌套或递归结构,因为它们会导致编译器在编译时无法准确地计算所需的存储空间。

(2)堆栈存储分配:它也可以是动态存储分配,由类似堆栈的运行堆栈实现。与静态存储分配相反,在堆栈分配方案中,程序是在编译时只能在运行时知道,但规定在运行到程序模块时,必须知道程序模块所需的数据区域的大小才能为其分配内存。我们知道每日一致,堆栈存储分配遵循先进先出的原则。

(3)堆存储分配:它专门负责分配在编译时或运行时程序模块条目中无法确定的数据结构,例如可变长度字符串和对象实例。堆存储器包括大块的使用块或空闲块,堆中的内存也可以按照任意顺序分配和释放。

堆与栈的比较

从普及的角度来看,堆用于存储对象,而堆栈用于存储可执行程序

堆内存与栈内存的区别_堆和栈在内存中的区别是什么_数据结构和内存中堆和栈的区别

堆栈:

在编程中(例如,在C / C ++中),所有方法调用都是通过堆栈进行的,所有局部变量和形式参数也都通过堆栈分配给内存。

使用它时,根据堆栈的工作原理,可以从堆栈顶部使用它。堆栈指针将自动将程序引导到存储位置,并且只需要存储该程序。退出函数时,修改堆栈指针以破坏存储在堆栈中的内容。

这种模块是最快的,适合于用户存储和执行程序。但是,应该注意的是,当例如进行存储器分配时,当为要调用的程序模块分配了数据区域时,尽管分配工作已经完成,但是应该知道所需数据区域的大小。在程序运行时执行“是”,但是在运行程序之前知道分配的大小。这是在编译时确定的,而不是在运行时确定的。

堆:

是操作系统在应用程序请求的运行过程中分配的内存。由于这是操作系统管理的内存分配,因此分配和销毁需要花费时间,因此堆的工作效率相对较低。

堆内存与栈内存的区别_数据结构和内存中堆和栈的区别_堆和栈在内存中的区别是什么

但是堆的优点是,编译器不需要知道从堆分配了多少内存空间,也不需要知道存储的数据应在堆中保留多长时间,这也使堆成为可能。保存数据具有更大的灵活性。

实际上,面向对象多态性的实现需要分配堆内存,因为多态对象所需的数据区域的大小只能在运行时确定对象之后才能知道。在Java中,只需要使用new关键字即可创建一个对象。执行这些代码后,数据将自动保存在堆中。正是由于这种灵活的存储空间分配功能,堆内存分配的效率并不高。

在JVM中进行堆和栈

堆和栈都是java用来将数据存储在内存中的地方。与C ++不同,java自动管理堆和堆栈,程序员不能自行设置堆和堆栈。

java中的堆是在运行时存储数据的区域。可以通过诸如new和new Array之类的指令创建该类的实例对象,以从中分配空间。这些空格不需要由程序代码显式释放。 JVM自动垃圾收集器负责处理堆。堆的优点是可以动态分配内存大小,并且不需要实现生命周期来告知编译器,因为空间是在运行时动态分配的。如果将堆中的数据确认为垃圾,JVM的自动垃圾收集器将自动回收相应的空间。但缺点是由于运行时动态空间分配,访问速度相对较慢。

堆栈的优点是访问速度比堆快,仅次于寄存器。堆栈数据可以共享,但是缺点是必须确定堆栈空间中数据的大小和生存期,这缺乏灵活性。堆栈主要存储一些基本类型的变量,包括int,short,long,byte,float,double,boolean,char和对象句柄。

堆栈的一个非常重要的特殊性是可以共享存储在堆栈中的数据。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-320566-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...