Max*_*ler 42 java optimization performance jvm final
引自http://sites.google.com/site/gson/gson-design-document:
为什么Gson中的大多数课程都被标记为最终?
虽然Gson通过提供可插拔序列化器和反序列化器提供了相当可扩展的架构,但Gson类并未专门设计为可扩展.提供非最终类将允许用户合法地扩展Gson类,然后期望该行为在所有后续修订中工作.我们选择通过将类标记为final来限制这样的用例,并等到出现良好的用例以允许扩展性.标记类final也有一个很小的好处,即为Java编译器和虚拟机提供额外的优化机会.
为什么会这样?[如果我猜测:JVM知道类是最终的,它不维护方法覆盖表?还有其他原因吗?]
性能有什么好处?
这是适用于频率实例化的类(POJO?)还是适用于持有静态方法(实用类)的类?
定义为final的方法在理论上也可以提高性能吗?
有什么影响吗?
谢谢你,马克西姆.
and*_*soj 18
IBM developerWorks上发表的一篇旧的,显然不再但仍然很重要的文章,其中指出:
常见的看法是,声明类或方法最终使编译器更容易内联方法调用,但这种看法是不正确的(或者至少,被夸大了).
最终的类和方法在编程时会带来很大的不便 - 它们限制了重用现有代码和扩展现有类功能的选择.虽然有时候一个班级是有充分理由的,例如强制执行不变性,但使用final的好处应该超过不便之处.性能增强几乎总是破坏良好的面向对象设计原则的坏理由,并且当性能增强很小或不存在时,这确实是一个糟糕的权衡.
另请参阅另一个问题的相关答案.这里还讨论了.Net的等效问题.所以讨论," 最后的方法是内联的吗?" 在题为" 明天哪些优化将毫无用处 "的问题上,这一问题出现在名单上.
还要注意,final
类和final
方法的影响是纠缠在一起的.对于确定的方法,你可能会获得一些性能优势(同样,我没有一个很好的参考)final
,因为它可以提示JIT做内联它不能做其他事情(或者不那么简单).标记类时final
,您会获得相同的效果,这意味着所有方法也会突然最终.请注意,Sun/Oracle人员声称HotSpot通常可以使用或不使用final
关键字.拥有课程本身是否还有其他影响final
?
归档时间: |
|
查看次数: |
12711 次 |
最近记录: |