Java for循环构建对象对内存消耗的分析(Java中的for循环里面创建对象和for循环外面创建对象之间的区别)

针对此问题,csdn上一般都有3种解释
1.非要较真的话,就是第一种循环结束所有创建的对象就可以被回收。第二种最后一个创建的要等到方法结束才会被回收
2.https://www.zhihu.com/question/31751468/answer/88626975 知乎哥们给的解释 或者  https://will-turner.iteye.com/blog/1604671的解释3.将变量声明在循环体外的做法的确节省不了多少空间,while长时间循环,确实节约了不少内存,约节约了50%或者更多,数据量小的场景未进行测试

以上3种解释听着都很有道理,按知乎的方式进行反编译效果一致,但实际变异存在差异。根据以上认知亲测,代码运行时长无明显差异,差异点在于Edin
内存消耗的区别

故结论:二者均可以,建议使用外部构建对象(jdk 1.8.0_45)

图三、图四属于编译器编译后的结果,若for对象在循环外定义.初始化为null或者未初始化为null,则编译的效果不同.不设置为null时则为知乎的哥们截图所示
若设置则见图四,至于此种对内存的消耗暂为通过分析工具进行分析

public class ForTestOut {

   public void out() {

      User user = null;
      while (true) {
         user = new User();
         user.setAge(0);
      }

   }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值