读阿里巴巴Java代码规约带来的困惑

158 阅读1分钟

今天重翻阿里Java代码规约,看到有这么一条: 【推荐】循环体中的语句要考量性能,以下操作尽量移至循环体外处理,如定义对象、变量、获取数据库连接,进行不必要的try-catch操作(这个try-catch是否可以移至循环体外)。 经不住要思考一下,这个在循环外定义变量,对象是针对引用的那部分定义,还是new的那部分定义呢?如果是new的话,我觉得不符合业务逻辑,因为我们经常在循环定义对象,然后放入容器。 如果是引用那部分定义放在外面能优化性能,感觉也说不通啊,因为不管在里面定义还是在外面定义,引用都是在栈里分配的,而在栈上面分配的资源在编译的时候就已经分配好了,不存在什么性能问题啊

637607483189317437.png

637607484496408133.png 贴上两张图,从字节码指令来看,变量槽只有一个,是复用的,望大佬们给我解答下