2013-01-14 23 views
0

我有三个类,一个是Feature和其他ContacstsSenderContactsRetrieverFeature类有两种方法在其他两个类中都很常见,他们必须使用它们。这两种方法都包含几行代码,比如说6到10.我想知道,把这些类和方法放在哪里,或者把这些小方法放在两个类中都可以,因为从另一个类调用一次又一次会花费效率?在内存概念中,如何从本地调用类和调用方法会有用?谢谢其他类的调用方法中的代码效率

+0

你可能会发现我写的这篇文章很有趣。 http://vanillajava.blogspot.co.uk/2012/12/performance-of-inlined-virtual-method.html –

+2

我曾经有一个比较复杂的算法来处理2D塔防游戏中的事件。我确信游戏运行缓慢。我把它调整到难以置信的难以理解的地步,几乎不可能理解。后来我终于决定使用一个分析器。在一个完全不同的地方Math.atan2计算中使用80%的处理能力,并在一个地方。通过简单的调整,我将处理时间缩短了近5倍。 TL; DR - 使用分析器。 – Dariusz

回答

2

从另一个类调用时,再次可能耗资效率

重要的是没有这么多的方法,通过在内存中的方法使用的参数的位置的位置。但即使是99%的情况下,参数的位置也不会有太大影响。

而在记忆的概念中,它会如何有用?

内存智慧它没有什么区别(除了类加载器加载的类文件的大小,但我们在这里讲的是数百字节)。

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

像往常一样进行优化,应用程序中的瓶颈并不是您认为的瓶颈,您应该使用分析器来查找它们。

+0

+1为了指出你应该在担心微观优化之前进行配置。 –

+0

如果我将它用于不同的平台,比如说J2me,那里的内存和这些东西可能有点关系?这是否保持相同或什么? – Saqib

+0

@Saqib使用或不使用方法编译您的类,检查文件大小(XXX.class文件,不是源文件)的差异,并确定它是否可接受。你可能会得出结论,差异很小,你的时间会花在其他领域上。 – assylias

2

来自同一类别或另一个类别的调用一般会花费相同的virtual method table查找。

我是指你在维基百科文章的全部细节,但下面的报价说明彼得的评论相当不错:

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

的一种方式,编译器将知道优化掉一个虚函数表查找包括使用在任一类或功能的final改性剂(因为那是不可能的一个子类覆盖的功能)的例子。

+1

+1只有当方法不能内联时才会发生,例如因为有超过2种可能的方法可以调用。 –

+0

事实上,我最初推迟了这篇文章,但我决定现在更新它,以便更清楚地了解何时可以优化虚拟表查找。 (这有点晚了,我正在懒惰......) –