java - 在什么时候,编写、维护以及最重要的是函数的开销成为重复代码的可行替代方案?

标签 java function optimization

我想知道这个问题有一段时间了,并认为我今天应该提出这个问题。

示例代码:

private void createLinks(int numUsers) {
for (int i = 1; i <= numUsers; i++) {
    String userId = "ID-" + i;
    String randomId;
    // Generate an ID to link to.
    do {
        randomId = "ID-" + random.nextInt(i);
    } while (randomId.equals(iUserId));
    link(userId, randomId); //links the first argument to the second, 
                            //links are not bi-directional.

    // Generate 4 more ID's to link to.
    for (int j = 1; j <= 4; j++) {
        do {
            randomId = "ID-" + random.nextInt(i);
        } while (randomId.equals(iUserId));
        link(userId, randomId);
        link(randomId, userId);
    }

    // Generate another ID to link 
    do {
        randomId = "ID-" + random.nextInt(i);
    } while (randomId.equals(iUserId));
    link(randomId, userId)
  }
}

#createLinks被多次调用,并且 do...while代码片段在方法中重复。将这 3 行代码提取到名为 generateRandomId(int i) 的方法中有意义吗?并产生函数开销以避免这种重复?如果createLinks被调用 100 次,generateRandomId将被调用 100*6 = 600 次。

这更像是一个与语言无关的问题,而不是特定于 java 的问题,但了解某些语言是否比其他语言更好地处理函数开销会很有趣。例如。 JVM 确实 function inlining优化函数调用,这可能意味着开发人员不需要担心我上面提到的事情。

最佳答案

这绝对是基于意见的问题,我希望它会被关闭。但无论如何我都会尝试回答这个问题,因为这个问题很常见。

如果您想要简单的答案 - 请不要担心。可能还为时过早。实际上,您提出问题的方式告诉我您缺乏有关调用该代码的频率以及它到底有多慢的信息。没关系。当发展的背景下存在很多未知因素时,我们都会面临这种情况。诀窍是——那些未知的将在操作上下文中变得已知(当你的代码实际运行时)。您将收到有关性能问题的反馈(如果有)。应该说,获得这些反馈本身并不是那么简单的任务,需要一定的技能和成熟的工具链。但这不是你问的问题。

我是否主张在开发时跳过任何性能优化?当然不,这是愚蠢的。有些问题可以而且应该尽早解决。我只是建议遵循简单明了的原则:

如果您有疑问 - 等待现实向您展示正确的方法

这一原则可能会像其他原则一样被滥用。但我希望你明白我的意思——过早的优化是万恶之源,对吗?

关于java - 在什么时候,编写、维护以及最重要的是函数的开销成为重复代码的可行替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981435/

相关文章:

java - JUNG:在现有 JPanel 上绘制图表

java - Hibernate 因 HQL 交叉连接而受阻

JavaScript 引用错误 : min is not defined

c - 使用函数在字符串中查找字符串

linq - 优化 "tune"LINQ 表达式的最佳方法是什么?

c++ - VS2008 c++ 编译器会优化以下 if 语句吗?

java - Retrofil 尝试对空对象调用接口(interface)方法

java - 高分数。保存文本文件是一个好方法吗?

javascript - React 组件状态的默认函数参数值

python - 优化python代码