java new对象释放_Java中频繁new一些对象会有什么问题?

很多人觉得产生大量的垃圾于是gc的压力就会很大,这是非常非常错误的。

没有用的对象并不会使得gc变慢,相反的,无法被释放的对象才会对gc产生压力。换言之gc的快慢不取决于有多少垃圾,而取决于对象中有多少不是垃圾。GC的基本假设是most objects die young。所以如果没有需要被移去下一gen的对象,young gen/eden space的回收不要太快,指针重置而已。

所以创建很多生命周期很短的对象并无不妥,gc就是来干这个事情的。事实上,很多程序员往往会犯的错误反而是在不该使用pooling的时候使用pooling,导致短时对象的生命周期被大幅延长,全部都进了old gen,而old gen的回收需要压缩,那个就慢了。

当然,new本身也是代码,是代码执行起来就需要时间,一秒几万次根本不算什么,但你要是一秒钟new上一千万次你的代码可能除了在执行new操作也干不了别的啥了。

除非你的代码对延迟,以及延迟的稳定有非常高的要求,不然你不需要担心尤其是成熟的序列化组建中创建的临时对象。我们做交易和高频交易内核,除非有比如任何时候我的端到端延迟都不得超过0.05ms这种级别的要求,我们都不需要担心gc产生的停顿。

总而言之,你需要写gc友好的代码,而gc友好的代码并不是尽可能的少创建对象。创建很多对象并无妨,只要你用完就扔。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值