JAVA中堆内存与栈内存的区别 JAVA 中的内存管理系统将内存划分为两种:一种是栈内存,一种是堆内存。栈内存主要存放基本类型的变量、对象的引用和方法调用,遵循先入后出的原则。在函数中定义的基本类型的变量和对象的引用变量都在函数的栈内存中分配。当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 栈内存的优势是,栈内存与堆内存相比是非常小的,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。 堆内存存放所有new出来的对象和数组,堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间,堆内存实际上指的就是(满足堆内存性质的)优先队列的一种数据结构,第1个元素有最高的优先权。 堆内存的大小受限于计算机系统中有效的虚拟内存。由此可见,堆内存获得的空间比较灵活,也比较大。堆内存是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,但是用起来最方便。 Java的堆是一个运行时数据区,类的(对象)从中分配空间。这些对象通过新的,newarray,anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的的垃圾收集器会自动收走这些不再使用的数据。 栈内存和堆内存的主要区别在于存储的数据类型、存储的生命周期、存储的方式和存储的大小等方面。栈内存主要存放基本类型的变量和对象的引用,生命周期很短,存储的方式是按照先入后出的原则,存储的大小是确定的。堆内存主要存放所有new出来的对象和数组,生命周期从程序的运行开始到运行结束,存储的方式是按照动态分配的原则,存储的大小是可变的。
- 粉丝: 8
- 资源: 928
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助