【问题标题】:Which is the best way to reduce complexity of time and space in Java?在 Java 中降低时间和空间复杂性的最佳方法是什么?
【发布时间】:2013-11-23 05:41:22
【问题描述】:

我正在编写一个程序,我担心它的运行时间和空间。

在程序中我使用了一个变量来存储数组的长度:

int len=newarray3.length;

现在,我想知道是否可以通过不使用 len 变量来降低空间复杂度,而是在需要时调用newarray3.length;

注意:只有两种情况需要使用长度。

【问题讨论】:

  • 你找错树了。如果您的程序很慢,您需要对其进行分析以找出最耗时的程序,猜测很少是直观的。
  • 提示:newarray3.length 已经是一个简单的字段。不是对某些重型函数的方法调用。
  • 在数组上调用 length 应该是恒定时间,正如这篇 SO 帖子中所解释的:stackoverflow.com/questions/1208320/… 因此,如果恒定时间足以成为您的性能问题,您可能正在查看@EvanTrimboli 指出的错误问题。

标签: java optimization


【解决方案1】:

“我们应该忘记小的效率,比如大约 97% 的时间:过早的优化是万恶之源”- Donald Knuth

首先,单个int 变量使用的空间量可以忽略不计。更一般地说,不要担心这些次要的性能(“时间和空间”)问题。专注于编写清晰易读的程序和高效的算法。如果性能成为问题,那么只要您的通用架构可靠,您就可以进行优化。所以专注于那个架构。

【讨论】:

  • @AndyThomas-Cramer 谢谢,错字
【解决方案2】:

我真的怀疑这是否会提高你的表现。 无论如何,我会使用 newarray3.length (而不是分配给一个占用内存并添加另一个操作的新变量)。无论如何,这是一个字段(甚至不是方法调用)。读取它与读取您复制的 int 值相同,但您节省了复制和 int 消耗的 4 字节内存。

【讨论】:

    【解决方案3】:

    Java 数组不可调整大小,因此该对象的长度成员变量是常量,这可能导致 JIT 进行各种优化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 2014-04-21
      相关资源
      最近更新 更多