关于Java对象是否都在堆中分配的理解

Java在jdk1.7之后时默认开启栈上分配的,栈上分配基于逃逸分析以及标量替换来实现。
逃逸分析:若是一个对象的创建和消亡都发生在一个方法内,在外界无法发现这样一个对象的存在,那么这个对象就是没有发生逃逸的。若是一个对象赋值给了类中的成员变量,或者return出去了,或者以其他的方法流出到外界了,那么就是发生了逃逸。
标量替换:当jvm发现一个对象是没有发生逃逸的时候,而且就会对这个对象进行标量替换,将其拆解为标量,存储到栈中(好处,省去了对象头的消耗,节省了内存空间,也提升了应用程序性能)
栈上分配的的优点:对象分配在栈上,可以随着方法栈的压入与弹出进行快速的创建和消亡,一定程度上减轻了GC的压力,还可以出发锁消除来提升一个程序的运行效率。
缺点:技术还没有彻底成熟
锁消除:当对象没有发生逃逸时,只在一个方法里,那么自然是只会被一个线程使用,那么就可以进行锁消除,避免加锁解锁的消耗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值