irtual方法相近。但对于双态与超多状态调用,由于需要在一张较大的虚拟表上面进行查找,所以需要更多的时间。而一旦我们开启内联支持,类型分析(type profiling )将会在单态或双态的调用点启用,使得在这些调用点上的方法调用的开销减少。但与层级结构的实例一样,这只会减少少量的时间。相比而言,超多状态的实例则依旧耗时较长。记住,我并没有说在这个测试中hotspot禁用了内联,它只是没有实现多态调用点的多态内联缓存。
我认为,需要我们引起注意的是,很多人没有认识到不同方式的方法调用所花费的时间是不一样的。即便有些人发现了这种问题,但他们不去证明是否真的如此。作为第一个吃螃蟹的人,我列出了各种坏的假设,因此我希望这份研究能够帮助到大家。以下是我很乐于与大家分享的一些结论:
我想说的是,对我而言,类型保护带来的性能开销是一个“重大发现”。这是一个我之前很少提及,并且总是当做无关事物忽视掉的因素。
本文不能囊括这个话题的全部内容。因为:
或许以上内容已经超出了本文的范畴,需要另写博文进行讨论。
原文链接: voxxed 翻译: ImportNew.com - elviskang
译文链接: http://www.importnew.com/16202.html