这个问题与记忆和主要表现有关.最近几天我反思这个话题,这不是我需要使用的东西,只是好奇.我创建了一个简单的例子:
1)一个不使用委托且没有内部类的类:
public class NoInnerClass { public void theMethod(int times){ for(int i=0; i2)一个类调用四个内部类.最后一个与theMethod方法中的NoInnerClass相同
public class InnerMain { private Inner1 inner1 = new Inner1(); public void theMethod(int times){ inner1.doIt(times); } }...
public class Inner4 { public void theMethod(int times){ for(int i=0; i我测量了这两种类型的调用之间的时间差(以毫秒为单位).差异并不大 - 超过一毫秒.但是,如果我们有更复杂的内部对象和更多的委托调用,我们肯定会有更大的差异.
所以问题是:
两种方法之间使用的内存时间和内存量的差异是否会显着增加
如果有,是否有任何关于此的文章(我找不到多少)
或许今天的JVM非常聪明,我们不应该考虑它
提前感谢您的回答.
你发现的差异(超过一毫秒)可能是你的基准测试技术的一个神器.而且,在不知道整个运行时间的情况下谈论毫秒是没有意义的:如果时间是几百毫秒,则差异很小; 如果时间本身是一位数毫秒,则差异很大; 如果时间以秒为单位,那么差异就是测量误差.
现代JVM优化了对这种效率水平的虚拟调用,您可以看到的任何差异都很难衡量.使用您可用的所有编码技术(包括虚拟调用)专注于使代码尽可能清晰,并且只有在您的探查器告诉您有必要时才开始优化,这样做要好得多.