繁体   English   中英

额外的代码块——范围——会减慢执行速度吗?

[英]Do extra code blocks—scopes—slow down execution?

每当我注释掉我的代码时——我喜欢有好的和大的注释。 有时需要嵌套大注释,我通常会添加额外的缩进。 但是,如果我能够使用额外的代码块{}来使缩进更合乎逻辑,那将会更加清晰。

让我们举一个简单的例子:

// ┌───────────────────┐
// │ COMMENT           │
// └───────────────────┘
{
    // Code in here
}
// ┌───────────────────┐
// │ ;                 │
// └───────────────────┘

此示例中的{}会以任何方式减慢 Java 程序的速度还是会被编译器自动删除? 当然, {}本身就是一个作用域,Java 想要保留它,对吗?

如果您的方法复杂且难以一次性理解,请尝试从大型方法中提取一种或多种方法。 注意:方法调用不是免费的,但较小的方法往往会被内联,因此即使在代码中调用方法,您也可以得到同样快的代码。

当然,{} 本身就是一个作用域,Java 想要保留它,对吗?

字节码可以有帧信息,但很少有。 通常没有办法从字节码中知道你是否使用了 extra { x(); } { x(); }(x)在您的代码中。

这些帧可能会或可能不会与实际生成的机器代码不同,但如果它们不存在,它们就没有区别。

大多数时候,最重要的是清晰度,当你测量出问题时,你应该担心性能。 您唯一需要预先担心的是当时间复杂度很重要时,请使用时间复杂度较低的策略。

每个独立的方法需要检查四个不同的放置方向。

在那种情况下,我会有一个循环

enum Direction {
    NORTH(0, +1), SOUTH(0, -1), EAST(+1, 0), WEST(-1, 0);

    final int x, y;

    Direction(int x, int y) { this.x = x; this.y = y; }
}

for (Direction dir : Direction.values()) {
    // do something with each direction.
}

您可以将Direction.values()存储在私有常量中以节省一些垃圾/分配。

它们不会真正减慢任何东西,因为它们会被编译器删除。

但是,与其编写这样的代码,不如尝试提取一个具有良好、自文档化名称的函数。 它将更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM