90%的 Java 程序员被误导的一个性能优化策略!
时间:2025-11-05 12:29:03 出处:应用开发阅读(143)

我们经常看到一些 Java 性能优化的被误书或者理念,说不要在循环内定义变量,个性这样会占用过多的化策内存影响性能,而要在循环外面定义。被误接触 Java 这么久以来,个性相信很多 Java 程序员都被这种代码性能优化策略所误导。化策
看下面两个示例,被误示例1在循环外定义变量,个性示例2是化策在循环内定义变量。
/** * 循环外定义变量 */ private static void outer() { Javastack javastack = null; for (int i = 0; i < 10; i++) { javastack = new Javastack(); } } /** * 循环内定义变量 */ private static void inner() { for (int i = 0; i < 10; i++) { Javastack javastack = new Javastack(); } }先来分析这两个示例吧。被误
循环外定义变量
循环外定义变量,个性变量循环内每次引用指向不同的化策对象实例,每次循环变更对象实例时,被误上一次被指向的个性对象就会被销毁,直到***一个循环。化策这样,循环结束后,这个变量还存在,并指向循环内***一个对象实例,其他对象都销毁了。
这样,本应该是云南idc服务商循环体内的生命周期变量被扩散到了循环外,如果循环外依旧用这个变量,会导致后面的业务发生不可预知的后果。这种问题在笔者工作当中经常会遇到,看下面的例子。
/** * 循环外定义变量 */ private static void outer() { Javastack javastack1 = null; for (int i = 0; i < 10; i++) { javastack1 = new Javastack(); } Javastack javastack2 = userDao.getUser(10); }上面定义了一个 javastack2 ,如果此时在后续代码或者传递到别的方法时写错了,用了 javastack1,那这时不就有问题了吗?这只是一方面,还有如果用同一变量名,当这一变量被重用时发生异常,本来发生异常应该是 null 值的,结果得到了是之前循环体内的值。
循环内定义变量
循环内定义变量,和循环外略有不同的是免费信息发布网,每次都会创建新的局部变量指向新的对象实例,每个变量和对象的生命周期仅限于在循环体之内,而且每次循环结束该局部变量和对象实例都会随着循环体的结束而销毁,所以不存在占用更多的内存这一说法。
总结
两种用法都会创建相同数量的对象实例,只不过循环内会反复创建相同数量的局部变量,栈内存垃圾回收频率也会更高,但对于堆垃圾回收带来的性能影响和变量生命周期带来的业务影响来说,栈内存这点性能影响可以忽略不计。
所以,建议使用循环内定义变量,这种把变量的生命周期限制在循环体范围内,也不会出现业务上重用变量而导致严重的问题。
源码下载猜你喜欢
- 电脑显卡安装教程(从选购到安装,掌握显卡安装的关键步骤)
- 免费的图片压缩软件推荐(节省存储空间,提升网页加载速度)
- 宏基硬盘装系统教程(简明易懂的宏基硬盘装系统教程,让你轻松上手)
- 电脑光盘重装系统教程(解决Win10没有分区的问题,重装系统指南)
- Z17自拍手机(探索Z17自拍功能的创新与魅力)
- 联想R720设置教程(教你如何正确配置和设置联想R720笔记本电脑)
- GHO安装教程(通过详细步骤和实用技巧,快速学会GHO的安装方法和注意事项)
- 苹果如何安装Win7系统教程(详细步骤让你轻松体验Win7系统)
- 使用VirtualBox时遇到一个问题,我复制一个原来安装好OS的VDI文件,并用它来当作新虚拟机的系统磁盘。 但当我通过Virtual Disk Manager添加新虚拟磁盘时,VirtualBox提示了这样的错误信息: VirtualBox命令详细可见:http://www.virtualbox.org/manual/UserManual.html 2、要想复制一个VDI再次使用,必须通过VboxManager命令实现,语法是: 3、将 vdi 转成 vmdk 4、VBoxManage命令有不少增强功能,可以参考UserGuide。 VirtualBox 复制vdi文件和修改vdi的uuid 1、复制vdi文件:VBoxManage clonehd复制代码代码如下:复制代码代码如下:复制代码代码如下:D:Program FilesOracleVirtualBox>VBoxManage internalcommands sethduuid E:VirtualBoxUbuntu 12.04.vdi结果如下:UUID changed to: 04094fb4-0a42-413a-a25d-9d02d804bd2a注:使用VBoxManage命令时,需要先在命令行中切换到VirtualBox的安装目录下。