在类内部使用访问器方法?

时间:2011-01-29 10:47:32

标签: java optimization accessor

我想知道在类本身中使用类的访问器方法是否会导致任何性能问题。我特别想知道Java编译器,但我想这与语言无关。

4 个答案:

答案 0 :(得分:2)

AFAIK,较新的JVM非常擅长在启动和即时中优化字节码。

来自J2SE SDK v 1.4.2的文档(已经非常陈旧,比如接近十年)已经提到JVM将在类中内联访问者调用:

“Java VM的Java 2版本在运行时自动内联简单方法。在未优化的Java VM中,每次调用新方法时,都会创建一个新的堆栈帧。堆栈帧需要额外的资源以及堆栈的一些重新映射,最终结果是创建新的堆栈帧会产生很小的开销。 方法内联通过减少程序调用的方法调用次数来提高性能。 Java VM内联代码内联返回常量或仅访问内部字段的方法。(强调我的)J2SE SDK 1.4.2_02 Chapter 8 Continued: Performance Features and Tools

另外,我确保软件的最大瓶颈实际上是<插入任何你觉得“慢”的东西,在这种情况下使用类中的访问器>。恕我直言,过早的优化是不好的,通过猜测进行优化甚至更糟,所以在尝试修复它之前,尝试分析并测量瓶颈实际上是你认为的位置。

答案 1 :(得分:1)

第一点是在遇到问题之前不要优化。第二个是禁止你编写更好的代码。更好的是,如果他们不做一些特殊的事情,不要使用getter / setter。在课堂上它是一个开销。例如,在Android开发者指南中,有关于案例的文字:它建议使用直接字段访问而不是getter / setter。

答案 2 :(得分:0)

值得记住的是,Java编译器几乎没有做任何优化。

然而,JIT可以内联简单的方法,例如普通的getter / setter,因此可以显着减少或消除它们的开销。

JVM甚至可以内联最多两个虚拟方法,大多数静态编译器都不会这样做。

答案 3 :(得分:-1)

访问器通常不是优化的(即转换为对类属性的直接调用),因此您应该避免使用它们,因为调用方法意味着在虚拟表中查找方法:请参阅:http://www.wordiq.com/definition/Optimization_of_Java