簡體   English   中英

使用更多方法是否意味着代碼性能較低?

[英]Do more methods mean the code is less performant?

即使不調用更多方法,它們也會影響特定類的性能...

就性能而言,我的意思是什么,例如創建對象需要花費更長的時間,實際執行方法需要花費更長的時間...等等...

現在,我的理解是,只有在到達之前未達到的代碼塊/方法的情況下,該代碼才由JIT編譯器進行編譯...這將使我認為我不會通過添加默認方法來影響任何事情。 是的,它將增加(字節)代碼的“大小”,但實際上不影響性能嗎?

我是對還是錯?

這是示例:

public interface MyInterface {
    void someMethod();

    public default void myDefaultMethod() {
        System.out.println("hey");
    }
}

public class MyClass implements MyInterface {

    public void someMethod() {
    }
}

public static void main(String[] args) {
    MyClass c = new MyClass();
    c.someMethod();
    c.myDefaultMethod();
}

如果我隨后更改MyInterface並添加很多默認方法,即使它們從未被調用過,也會產生影響:

public interface MyInterface {
    void someMethod();

    public default void myDefaultMethod() {
        System.out.println("hey");
    }

    public default void myDefaultMethod1() {
        System.out.println("hey1");
    }

    public default void myDefaultMethod2() {
        System.out.println("hey1");
    }

    // ...

    public default void myDefaultMethod100() {
        System.out.println("hey100");
    }
}

從某種意義上說你是對的。 不過有些細微差別。

即使不調用更多方法,它們也會影響特定類的性能...

“性能”通常是指程序的執行速度。 永遠不會執行的代碼永遠不會(直接)消耗任何CPU時間。 因此,永遠不會執行的代碼不能(直接)影響執行時間。 所以從這個意義上講,您是正確的。

就性能而言,我的意思是什么,例如創建對象需要花費更長的時間,實際執行方法需要花費更長的時間...等等...

不,不。 沒有理由使用額外的方法來影響對象的創建時間,因為這是對象大小的函數,並且至少在Java對象中,如果有內存,則對象不直接包含其方法。 擁有額外的方法絕對不會(直接)影響不相關方法的執行。

現在我的理解是,只有在達到以前從未達到的代碼塊/方法的情況下,JIT編譯器才能編譯該代碼。

這是不完全正確的。 如果JITC認為這樣做會是有益的,則可以一遍又一遍地重新訪問同一段代碼。

...這會使我認為我不會通過添加默認方法來影響任何事情。 是的,它將增加(字節)代碼的“大小”,但實際上不影響性能嗎?

沒錯,字節碼文件會更大。 你錯了,那不會有什么不同。

代碼大小可能會對性能產生重大影響。 可以容納大多/完全在高速緩存小程序將有顯著優勢較大的程序,如代碼段不必從RAM或HDD / SSD,它比高速緩存慢得多裝載。

但是,執行此操作所需的代碼量可能非常大,因此對於一個或兩個方法而言,它並不重要。 我不確定Java中的代碼大小會在什么時候成為問題。 從未嘗試找出。

如果您從不調用這些方法,則可能永遠不會加載組成這些方法的代碼位,從而消除了與緩存有關的性能損失。 不過,我不確定是否可以拆分這樣的程序代碼。


所以最后,只要您沒有過多的方法,它可能就不會有害。 但是,永遠不要調用周圍的方法可能是代碼可維護性的問題,這始終是您應考慮的因素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM