Java中的栈和堆有什么不同?

从数据结构的方面来说:
1.栈是一种先进先出的数据结构,而堆就是一种完全二叉树,有大顶堆,小顶堆
从内存方面来说:
1.栈是线程独享的区域,而堆是线程共享的区域
2.栈里面保存的是局部变量、操作数栈等信息,而堆里面保存的是创建的对象信息
3.一个方法的调用和退出就代表这一个栈帧的入栈和出栈,而堆里面的东西只能通过JVM来进行回收,堆里面又分为新生代和老年代,新生代又分为Eden区、S0区和S1区,比例是8:1:1,首先对象会在Eden进行分配内存,因为新生代的对象都具有朝生夕灭的特性,所以发生YGC的频率很高,所以采用的是复制算法,将Eden区和一个S区存活的对象复制到另一块S区内,然后回收Eden区和S区,如果是大对象就直接进入老年代,对象经过一次YGC依旧存活,那年龄就+1,当年龄超过15的时候,就进入老年代,因为S区的内存较小,不能保证每次空间都够用,当S区空间不够保存存活的对象时,就会通过空间担保机制进入老年代,老年代采用的是标记整理算法或者标记清除算法,并且每发生一次MajorGC就会伴随一次或者多次YGC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值