Hid*_*dde 5 java variables performance
我问这个问题纯粹是为了问题的速度方面.
从私有或公共(Java)获取对象的值之间的速度差异是什么?
class MyClass {
public int myInt = 5;
}
class MyOtherClass {
private int myInt = 5;
public int getMyInt() {
return myInt;
}
}
class MyMainClass {
public static void main (String [] args) {
MyClass myObject = new MyClass();
MyOtherClass myOtherObject = new MyOtherClass();
// which is faster?
System.out.println(myObject.myInt);
System.out.println(myOtherObject.getMyInt ());
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以测试它,但如果有人知道它,它不会伤害:)提前谢谢!
公共和私有访问只不过是在编译时确定您是否可以访问变量.在运行时,它们完全相同.这意味着如果您可以欺骗JVM认为您有权访问(通过反射,不安全或修改字节码),那么您可以.公共和私有只是编译时间信息.这并不是说它不会存储在字节码中,因为它确实存在,但只有在某些东西试图针对它进行编译时才可以引用它.
字段上的访问修饰符不会对速度产生任何影响,但调用访问器方法会有所不同.
但是,差异并不大,并且由于JIT编译器优化而在重复调用之后可能会减少.这取决于你的情况,但我没有发现性能问题证明消除访问器的合理性.让良好的设计原则推动您的决策.
在这种情况下有助于提高性能的一个好的设计原则是禁止继承,除非您知道需要继承并已采取措施来支持它.特别是,声明类final(或至少是访问器方法)将提供更快的方法调度,并且还可以作为JITC的提示,以更加积极地内联.
保持访问者最终还允许编译器内联对访问者的调用.如果该字段是私有的,则可以内联从类中调用访问者(并且在良好的设计中,这些是最常见的情况),而包可访问字段可以在整个包中内联等.