gpt4 book ai didi

java - 更多方法是否意味着代码性能较差?

转载 作者:行者123 更新时间:2023-12-01 12:49:32 26 4
gpt4 key购买 nike

执行更多方法,即使不调用它们,也会对特定类的性能产生影响...

说到性能,我的意思是任何东西,比如创建对象是否需要更长的时间,实际执行方法是否需要更长的时间......等等......

现在我的理解是,只有当代码到达之前未到达的代码块/方法时,代码才会由 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");
}
}

最佳答案

从某种意义上来说你是对的。不过,还是有一些细微差别。

Do more methods, even if they are not called, have an affect on the performance of a particular class...

“性能”通常是指程序的执行速度。从未执行的代码永远不会(直接)消耗任何CPU时间。因此,从未执行的代码不能(直接)影响执行时间。所以从这个意义上说,你是对的。

By performance, I mean anything, like does it take longer to create the object, does it take longer to actually execute a method...etc...

不,不。没有理由存在额外的方法会影响对象创建时间,因为这是对象大小的函数,并且至少在 Java 中对象不直接包含它们的方法(如果内存允许的话)。拥有额外的方法绝对不会(直接)影响不相关方法的执行。

Now my understanding is that the code will only be compiled by the JIT compiler if it reaches a code block/method that it has not reached before...

这并不完全正确。如果 JITC 认为这样做有益的话,它可以一遍又一遍地重新访问同一部分代码。

... which would lead me to think that I am no affecting anything by adding default methods. Yes it will add to the "size" of the (byte) code but doesn't actually affect performance?

你说得对,字节码文件会更大。你错了,这不会产生任何影响。

代码大小会对性能产生显着影响。可以大部分/全部容纳在缓存中的小型程序将比大型程序具有显着优势,因为代码片段不必从 RAM 或 HDD/SSD 加载,而这些程序的速度缓存。

不过,执行此操作所需的代码量可能相当大,因此对于一两个方法来说可能并不那么重要。我不确定 Java 中的代码大小在什么时候会成为问题。从来没有试图找出答案。

如果您从不调用这些方法,则组成这些方法的代码位可能永远不会被加载,这消除了与缓存相关的性能损失。不过,我不确定是否可以像这样拆分程序代码。

<小时/>

所以最终,只要你没有过多的方法,它可能不会有害。但是,拥有从未被调用的方法可能会导致代码可维护性出现问题,这始终是您应该考虑的一个因素。

关于java - 更多方法是否意味着代码性能较差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24340170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com