堆与栈

[size=medium][b]接触编程有段时间了.一直没深入堆栈问题。这一次一定要深度解析把他一次搞定.[/b][/size]


:shock: :shock:


[b]Java把内存划分成两种:一种是栈内存,一种是堆内存。 [/b]

Stack:翻译为栈或堆栈,指的就是一种后进先出的数据结构。
Heap :堆,堆是一个无序的结构。
Stack有时候翻译成堆栈,是因为heap是stack的组成单元。


[size=xx-large]堆[/size]是一个运行时数据区,对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式地释放。堆是由垃圾回收来负责的.

[size=xx-large]堆[/size]的[size=medium][b]优点[/b][/size]:可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收 集器会自动收走这些不再使用的数据。

[size=xx-large]堆[/size]的[size=medium][b]缺点[/b][/size]:由于要在运行时动态分配内存,存取速度较慢。


[size=xx-large][b]栈[/b][/size]是用来存放一些原始数据类型的局部变量数据和对象的引用(String、数组、对象等等)但不存放对象内容。存放一些基本类型的变量数据(int,short,long,byte,float,double,boolean,char)和对象引用。
引用在白皮书中直接指出是实际就是一个C的"指针"。

[size=xx-large]栈[/size]的[size=medium][b]优点[/b][/size]:存取速度比堆要快,仅次于寄存器,(不是寄存器)。栈数据可以共享。

[size=xx-large]栈[/size]的[size=medium][b]缺点[/b][/size]:是,存在栈中的数据大小与生存期必须是 确定的,缺乏灵活性。


总结.
栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
堆:存放所有new出来的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值