当前位置:首页 > 内存 > 正文

静态内存和栈内存的区别

  • 内存
  • 2024-06-08 19:43:33
  • 5024

一、内存中栈,堆,静态区到底有什么区别以下是专业解答:
1.栈区(stack)——由编译器自动分配和释放,用于存储函数参数值、局部变量值等。它的工作原理类似于数据结构中的堆栈。
2.堆区(heap)——一般由程序员分配和释放,如果程序员不释放,则可能在程序终止时被操作系统回收。注意,它在数据结构上与堆不同,分配方式与链表类似。
3.全局区域(静态区域)(static)——全局变量和静态变量存储在一起。未初始化的全局变量和静态变量位于另一个连续区域。-程序结束后系统下发
这里我用代码来帮助理解
publicclassIamClass{
publicIamClass(){}
publicintx;
publicIamClass(intx){this.x=x;
声明此类时:
IamClassiamclass;
将在堆栈上创建一个不包含任何数据的类和。它不引用任何变量对象。
使用iamclass=newIamClass(1);后,会在堆中实例化引用类型对象,分配内存地址,然后将实例引用自动传递给构造函数。调用构造函数并将iamclass变量放在堆栈上后,将返回引用。
staticinti=0,将被放置在之前固定的区域。


二、堆内存和栈内存的区别

1.不同的内存区域

堆内存是不同于堆栈区、全局数据区、代码区的另一个内存区域。堆允许程序在运行时动态申请给定大小的内存空间。一些基本类型的变量和引用变量在函数的堆栈内存中分配给函数中定义的对象。

2.各种属性

堆内存实际上指的是优先级队列的一种数据结构。栈内存实际上是一种满足先进后进性质的数学结构或数据结构。栈内存访问速度比堆速度快,仅次于寄存器,并且栈数据可以共享。

3.范围不同

堆内存中分配的内存必须由程序员手动释放内存管理器不会自动释放,如果回收这些内存并动态分配堆内存,就会总是被占用。该变量的内存空间在堆栈内存中分配。当超出变量的作用域时,Java会自动释放分配给该变量的内存空间,该内存空间可以立即用于其他用途。

参考来源:-堆内存

参考来源:-栈内存