Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用其他类方法的代码效率_Java_Memory_Performance - Fatal编程技术网

Java 调用其他类方法的代码效率

Java 调用其他类方法的代码效率,java,memory,performance,Java,Memory,Performance,我有三类,一类是功能,另一类是联系人和联系人检索器功能类有两种方法,这两种方法在其他两个类中都很常见,它们必须使用它们。这两种方法都包含几行代码,比如6到10。我想知道,将这些类和方法保留在它们所在的位置,或者将这些小方法放在这两个类中,这样做可以节省成本吗?在内存的概念中,从类调用并在本地调用方法有什么用处?谢谢从同一个班级或另一个班级打来的电话通常会花费相同的查找费用 我请你参考维基百科的文章了解全部细节,但是下面的引文很好地解释了彼得的评论: 此外,在不使用JIT编译的环境中,虚拟函数调用

我有三类,一类是
功能
,另一类是
联系人
联系人检索器
<代码>功能类有两种方法,这两种方法在其他两个类中都很常见,它们必须使用它们。这两种方法都包含几行代码,比如6到10。我想知道,将这些类和方法保留在它们所在的位置,或者将这些小方法放在这两个类中,这样做可以节省成本吗?在内存的概念中,从类调用并在本地调用方法有什么用处?谢谢

从同一个班级或另一个班级打来的电话通常会花费相同的查找费用

我请你参考维基百科的文章了解全部细节,但是下面的引文很好地解释了彼得的评论:

此外,在不使用JIT编译的环境中,虚拟函数调用通常不能内联。例如,编译器可以用每个内联体的条件执行来替换查找和间接调用,但这种优化并不常见。 为了避免这种开销,编译器通常避免在编译时解析调用时使用vtables


编译器知道的优化vtable查找的一种方法示例包括在类或函数上使用
final
修饰符(因为这样子类就不可能重写功能)。

从同一个类或另一个类调用通常会花费相同的查找费用

我请你参考维基百科的文章了解全部细节,但是下面的引文很好地解释了彼得的评论:

此外,在不使用JIT编译的环境中,虚拟函数调用通常不能内联。例如,编译器可以用每个内联体的条件执行来替换查找和间接调用,但这种优化并不常见。 为了避免这种开销,编译器通常避免在编译时解析调用时使用vtables

编译器知道的优化vtable查找的一种方法示例包括在类或函数上使用
final
修饰符(因为这样子类就不可能重写该功能)

因为一次又一次地从另一个类调用可能会降低效率

重要的不是方法的位置,而是方法在内存中使用的参数的位置。但在99%的情况下,即使参数的位置也不重要

在记忆的概念中,它有什么用处呢

内存方面没有区别(除了类加载器加载的类文件的大小,但我们这里讨论的是数百字节)

因此,避免代码重复,您会没事的

与通常的优化一样,应用程序中的瓶颈不在您认为的位置,您应该使用探查器来查找它们

因为一次又一次地从另一个类调用可能会降低效率

重要的不是方法的位置,而是方法在内存中使用的参数的位置。但在99%的情况下,即使参数的位置也不重要

在记忆的概念中,它有什么用处呢

内存方面没有区别(除了类加载器加载的类文件的大小,但我们这里讨论的是数百字节)

因此,避免代码重复,您会没事的


与通常的优化一样,应用程序中的瓶颈并不是您认为的那样,您应该使用探查器来查找它们。

+1只有当方法无法内联时才会发生这种情况,例如,因为可以调用的方法超过2个。的确,最初我遵从了这篇文章,但现在我决定更新它,以便更明确地说明何时可以优化vtable查找。(有点晚了,我有点懒…)+1只有当方法无法内联时才会发生这种情况,例如,因为有2个以上的方法可以调用。事实上,我最初是按照这篇文章进行的,但我决定现在更新它,以便更明确地说明何时可以优化vtable查找。(有点晚了,我很懒…)+1指出,在担心微优化之前,你应该先分析一下。如果我在不同的平台上使用它,比如说J2me,内存和这些东西可能会有点问题,那该怎么办?这是相同的还是什么?@Saqib编译您的类时使用和不使用该方法,检查文件大小的差异(XXX.class文件,而不是源文件),并确定它是否适用于您的用例。你可能会得出这样的结论:差别很小,你最好把时间花在其他方面。+1指出,在担心微优化之前,你应该先分析一下。如果我在不同的平台上使用它,比如说J2me,内存和这些东西可能会有点重要呢?这是相同的还是什么?@Saqib编译您的类时使用和不使用该方法,检查文件大小的差异(XXX.class文件,而不是源文件),并确定它是否适用于您的用例。你可能会得出这样的结论:差别很小,你的时间最好花在其他方面。你可能会发现我写的这篇文章很有趣。我曾经有一个相对复杂的算法来处理2D塔防游戏中的事件。我确信这场比赛因此进展缓慢。我把它调整到难以置信的不可读和几乎不可能理解的程度。后来,我终于决定使用分析器。80%的处理能力用于Math.atan2计算,在一个完全不同的地方,在一个地方。通过一个简单的调整,我将处理时间缩短了近5倍。TL;DR-使用探查器。您可能会发现这篇文章