Java: 逃逸分析

概述:

对象一般都是在堆上生成的,也不是绝对的,特例:逃逸分析。

JVM 在分析代码之后,发现一个对象在声明之后只有在当前运行的函数中调用,那么就会将这个对象在栈上申请空间,而不是在堆上。

这就是JDK6上的逃逸分析。

因为在栈上申请的对象函数执行完毕后直接清理,就大大减少了GC的压力。


demo:

 传入的value应当大于127或小于-128。

编辑运行的模式,设置堆的大小为10M,并设置打印GC的过程。

JDK6默认开了逃逸分析通过设置-XX:-DoEscapeAnalysis来关闭逃逸分析:

设置为10M是为了尽快进入GC。

 

不断打印了GC的过程,空间又满了又进入GC。

这是因为new 对象会在堆上申请空间。所以会疯狂GC.

现在打开逃逸分析:

 

 几次GC后就不再GC了。这就是逃逸分析。

逃逸分析是分析了当前对象只在当前函数范围内使用,因而改为在栈上申请空间。栈是函数运行完就立刻清理的,不需要等到GC,缓解了GC的压力。

如果不是只在当前函数范围内用到的对象不行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒不了的星期八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值