内存中栈,堆,静态区到底有什么区别

2024-11-26 10:20:42
推荐回答(1个)
回答1:

以下是专业回答:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放 , 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放
这里我用代码来帮助理解
public class IamClass{
public IamClass(){}
public int x;
public IamClass(int x){this.x=x;}
}
当声明这个Class :
IamClass iamclass;

在栈上会创建一个不包含任何数据,也不指向任何对象的变量。
使用iamclass=new IamClass(1);后就会在堆上创建一个引用类型对象的实例,并分配内存地址,然后自动传递该实例的引用给构造函数,调用该构造函数后返回该引用给栈中的iamclass变量。
static int i=0,会提前放在静态区里。