簡體   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