堆与栈
关于堆和栈的问题,对于熟悉C++的同学来说可能理解的比较清楚,但是由于Java的一切对象都是在堆上,因此有时候可能反而会比较迷惑,比如:
为什么要分堆和栈?
堆和栈的区别是什么?
为什么堆是线程共享的而栈不是?
很多懂一点Java的人甚至是懂一点编程的人都知道内存一般分为堆和栈,栈由系统进行关系,而堆由程序员自己管理,...balabala,基本任何一本语言基础书都会提到这些特点,但是你有想过为什么吗?
为什么要分堆和栈
之所以要区分堆和栈,是由于程序需要两种不同特性的内存形似而确定的。在C++中,新建一个对象有两种方式,静态分配和动态分配,
静态分配
一般来说,静态分配用于初始化已知对象大小的时候,比如int a[10];如果我们能够确定这个数组是10个,我们可以使用这种方式。这种方式所需要的内存在编译期间即可确定,因此操作系统便可以预先确定所指定大小内存给变量,并且可以在变量生命周期结束后自动释放。
动态分配
然而在某些场景下,可能需要根据某些情况来申请内存,比如int* a =new int[count];而变量count可能就来自于某个配置文件或者用户手动输入的值。这个时候操作系统就无法
本文探讨了堆和栈的区别,包括它们在内存管理中的作用,为何要区分堆和栈,以及Java中堆作为线程共享的原因。堆是运行时确定内存大小并由JVM管理,而栈在编译时即确定,由线程私有。了解这些基础知识有助于理解Java内存管理及线程通信机制。
订阅专栏 解锁全文
1603

被折叠的 条评论
为什么被折叠?



