Java 执行额外的代码块—;范围—;放慢执行速度?

Java 执行额外的代码块—;范围—;放慢执行速度?,java,scope,Java,Scope,每当我注释我的代码时,我喜欢有好的和大的注释。每当需要嵌套大注释时,我通常会添加额外的缩进。然而,如果我能够使用额外的代码块{}使缩进更具逻辑性,那就更清楚了 让我们举一个简单的例子: // ┌───────────────────┐ // │ COMMENT │ // └───────────────────┘ { // Code in here } // ┌───────────────────┐ // │ ; │ // └────

每当我注释我的代码时,我喜欢有好的和大的注释。每当需要嵌套大注释时,我通常会添加额外的缩进。然而,如果我能够使用额外的代码块
{}
使缩进更具逻辑性,那就更清楚了

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

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

本例中的
{}
会以任何方式降低Java程序的速度,还是会被编译器自动删除?当然,
{}
本身就是一个作用域,Java希望保留这个作用域,对吗?

它们不会真正减慢任何速度,因为它们将被编译器删除


但是,您可能不想编写这样的代码,而是想尝试提取一个具有良好的自文档名称的函数。它的可读性会更好。

如果您的方法很复杂,很难一次性理解,请尝试从大型方法中提取一个或多个方法。注意:方法调用不是免费的,但是较小的方法倾向于内联,因此您可以最终得到与代码中的方法调用同样快的代码

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

字节码可以有帧信息,但很少有帧信息。通常无法从字节码知道您在代码中是否使用了额外的
{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()
存储在一个私有常量中,以节省一些垃圾/分配。

为什么不直接对其进行基准测试呢?但是这怎么会减慢代码的速度呢?@YvesDaoust你说得很对-我当然应该!我讨厌这样的评论。它们丑陋、杂乱无章,而且比它们描述的代码更可能过时。最好编写自文档代码。我确信JVM足够聪明,可以优化它。@duffymo这不是我现在的问题,是吗?这并不意味着评论不值得。像这样的纳米优化很少引起关注。你写的其他东西效率低下会给你带来麻烦。了解什么影响性能的唯一方法是使用一个好的分析工具和度量。实际上,我正在研究一种世界新一代。每个独立的方法需要检查四个不同的放置方向。注释用于跟踪方向,有时还用于跟踪不同项目的位置。