- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在一个程序中,例如,我有50
for 循环,经常运行;每次运行时都会创建 50
int
,然后每个都会消耗内存。
如果我声明一个 int
i
在每个类的开头,然后在每个 for 循环中重用它,现在会有,比如说,5 个整数 i
(i
= 类的数量)创建,然后在每个循环中重新分配值 0
,通过不使用 i
淹没堆来节省空间s.
这会有助于程序的性能还是不会有太大差异?在这种情况下,堆内存是否像我想象的那样工作?
最佳答案
如果您的循环位于同一方法中,则许多循环本身可能就是一种代码味道。也许您应该将该方法分割成更小的代码块,这些代码块可以更容易地测试,并且彼此独立。
循环中的计数器几乎总是彼此独立。异常(exception)情况可能是一个循环向上计数,下一个循环向下计数,其中初始值取决于前一个循环的最后一个值。如果您将计数器重新初始化为 for 循环的第一个语句(到目前为止我见过的 99% 的循环都是这种情况),那么它们是彼此独立的,并且计数器变量的声明应该反射(reflect)这一点。这是记录代码的一种重要方式。
重复使用计数器只能证明某些编码人员的优化想法是错误的。
现在更糟糕的想法是在类级别定义一些计数器(一些计数器,因为您有嵌套循环)并从不同的方法调用相同的计数器。哇!你不会考虑这一点,是吗?这不仅会避免使类线程保存 - 您无法从另一种方法调用一种方法,而不会让自己陷入困境。
考虑一下这样的情况:您有一个带有 for 循环的方法,由于某种原因您将重构该方法。也许 Java9 可以提供更优雅的解决方案,但它有一个带有一些 i 的 for 循环,并且 i 在 for 循环的顶部初始化 for (i=0; ...
和现在你看看它来自哪里,并意识到,它不是在该方法中声明的,而是一个实例变量!该类有 500 行长,其中有 20 个方法,每个方法平均长 25 行。其中许多使用同样的i。现在你必须调查,你的方法调用了哪个方法,哪个方法调用了你的方法,并且可能取决于你结尾的i的值,它可以并行运行。你注定要失败!而不是25 行代码,你脑子里必须有 500 行代码,才能推理出发生了什么。
只要没有充分的理由重用它,局部变量的范围就应该尽可能窄。变量在作用域内的行数越少,某些代码就越容易理解。
您必须始终查看变量的初始化位置,以找到它的当前值,在声明变量的位置,找到它的类型(它是长整型还是整型) ,一个字节,一个短?),稍后会重复使用。计数器几乎从不重复使用。通过在 for 循环头中声明它们,可以轻松推理您的代码,这样每个人都知道,它对后面的代码没有影响。
好吧,在有意义的地方使用简化的 for 循环,以防止丑陋的相差一错误。那么您就不必考虑使用了几个字节。
但最后,我承认,对于初学者来说,这是一个合理的问题。我以前也有这个想法。 :)
关于java - 为每个 for 循环使用相同的 int 是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49683558/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!