90%的 Java 程序员被误导的一个性能优化策略!

我们经常看到一些 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(); } }先来分析这两个示例吧。被误
循环外定义变量
循环外定义变量,个性变量循环内每次引用指向不同的化策对象实例,每次循环变更对象实例时,被误上一次被指向的个性对象就会被销毁,直到***一个循环。化策这样,循环结束后,这个变量还存在,并指向循环内***一个对象实例,其他对象都销毁了。
这样,本应该是网站模板循环体内的生命周期变量被扩散到了循环外,如果循环外依旧用这个变量,会导致后面的业务发生不可预知的后果。这种问题在笔者工作当中经常会遇到,看下面的例子。
/** * 循环外定义变量 */ 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 值的,结果得到了是之前循环体内的值。
循环内定义变量
循环内定义变量,和循环外略有不同的是免费源码下载,每次都会创建新的局部变量指向新的对象实例,每个变量和对象的生命周期仅限于在循环体之内,而且每次循环结束该局部变量和对象实例都会随着循环体的结束而销毁,所以不存在占用更多的内存这一说法。
总结
两种用法都会创建相同数量的对象实例,只不过循环内会反复创建相同数量的局部变量,栈内存垃圾回收频率也会更高,但对于堆垃圾回收带来的性能影响和变量生命周期带来的业务影响来说,栈内存这点性能影响可以忽略不计。
所以,建议使用循环内定义变量,这种把变量的生命周期限制在循环体范围内,也不会出现业务上重用变量而导致严重的问题。
云服务器相关文章
电脑QQ老显示密码错误的原因和解决方法(密码错误问题分析及解决办法)
摘要:在日常使用电脑QQ的过程中,有时候会遇到账号密码老是显示错误的情况。这种问题不仅会影响到我们的正常使用,还会带来一定的困扰。本文将分析电脑QQ老显示密码错误的原因,并提供解决办法,...2025-11-04
Jmh基准测试,看我怎么用它来测试Mongodb的数据加载性能
本文转载自微信公众号「稀饭下雪」,作者帅气的小饭饭 。转载本文请联系稀饭下雪公众号。「主管小肥肥:」 最近我们这边引入了mongodb,不过没有实际上测试过性能如何,只是听说读写比mysql快,你今天2025-11-04
如果你是一名Java开发人员,并且想了解有关Spring Boot和Spring Cloud框架的相关信息,那你今天真是来对地方了,今天,猿哥将和大家讨论一些学习Spring Boot和Spring2025-11-04
谷歌是现代增强现实 (AR) 领域的早期领导者之一,但该公司近年来的努力似乎并未取得太大进展。不过,随着苹果和 Facebook 都在 AR 上投入了大量资金,这种趋势很快就会逆转。▲ Google2025-11-04如何从iCloud恢复出厂设置(一步步教你恢复设备到出厂设置)
摘要:在日常使用中,我们的设备可能会出现各种问题,例如系统崩溃、数据丢失等。为了解决这些问题,恢复设备到出厂设置是一个常见的方法。本文将详细介绍如何通过iCloud来恢复设备到出厂设置。...2025-11-04
申请域名需要多长时间?域名不仅是网站的地址,也是品牌形象的重要组成部分。许多人在决定建立网站时,会首先考虑申请一个域名。然而,申请域名的过程需要多长时间呢?下面将介绍域名申请的时间因素及其影响。一、域2025-11-04

最新评论