繁体   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