[英]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.