博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆栈区别:
阅读量:5054 次
发布时间:2019-06-12

本文共 546 字,大约阅读时间需要 1 分钟。

栈:对于一台机器而言,栈的空间是固定的,而且远小于堆空间。栈的先进后出无需多言,其使用是非常普遍的,但都是存储轻量型数据。比如在函数调用时,会将 某些函数参数压栈保护;函数体内的指针、局部变量都是存储在栈中的。你不太可能会在一个函数体内使用几十万个字节的局部变量吧,栈的空间足矣;

堆:堆的空间大小与机器的配置有关。你在使用new的时候,首先会在虚拟内存空间中开辟存储空间,若虚拟内存耗完,则会使用你的存储器,也就是你的硬盘空 间,所以,在目前的机器配置上,你可以随意new而不太用担心内存不够用。但是,内存的泄露也都是由堆内存引发的。当然在java里面是不用太操心这个问 题了。

说简单点,就是堆适用于存储对象实例,和类信息的,其中的数据可以为多线程共享,里面的数据存在时间视对象与类的存在时间而定。一般较长,而且里面的数据回收需要GC

而栈是方法执行区,里面存储的是局部变量和方法运行时栈帧,里面的数据是私有的,不共享的,且随着方法的结束而销毁。无需GC回收

据说经典的讲解:http://blog.csdn.net/hairetz/article/details/4141043

转载于:https://www.cnblogs.com/neversayno/p/5421234.html

你可能感兴趣的文章
Redis学习---Redis操作之其他操作
查看>>
WebService中的DataSet序列化使用
查看>>
BZOJ 1200 木梳
查看>>
【Linux】【C语言】菜鸟学习日志(一) 一步一步学习在Linxu下测试程序的运行时间...
查看>>
hostname
查看>>
SpringBoot使用其他的Servlet容器
查看>>
关于cookie存取中文乱码问题
查看>>
mysql 多表管理修改
查看>>
group by order by
查看>>
Oracle学习之简单查询
查看>>
log4j配置
查看>>
linux 配置SAN存储-IPSAN
查看>>
java学习笔记之String类
查看>>
pymysql操作mysql
查看>>
Linux服务器删除乱码文件/文件夹的方法
查看>>
牛腩记账本core版本源码
查看>>
Word Break II
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
jdk从1.8降到jdk1.7失败
查看>>
一些关于IO流的问题
查看>>