Java “public/protected/private”关键字对性能有影响吗?

Java “public/protected/private”关键字对性能有影响吗?,java,performance,access-modifiers,Java,Performance,Access Modifiers,据我所知,public/protected/private关键字对创建时间没有影响。但我想知道,保持公共对象/类的可访问性应该是有代价的。它有成本吗?没有。它们本质上是编译时结构 也就是说,一些OOP语言(例如C++)可以基于私有的东西做出优化决策。但是,由于反射的原因,这在Java中不太可能被利用,因为在Java中,private不能保证它对类外的事物不可见 保持公共对象/类的可访问性应该是有代价的 是的,编译器需要检查您正在访问的对象是否是私有的、受保护的和公共的。然后它决定是否允许您访问它

据我所知,
public/protected/private
关键字对创建时间没有影响。但我想知道,保持公共对象/类的可访问性应该是有代价的。它有成本吗?

没有。它们本质上是编译时结构

也就是说,一些OOP语言(例如C++)可以基于
私有的东西做出优化决策。但是,由于反射的原因,这在Java中不太可能被利用,因为在Java中,
private
不能保证它对类外的事物不可见

保持公共对象/类的可访问性应该是有代价的

是的,编译器需要检查您正在访问的对象是否是私有的、受保护的和公共的。然后它决定是否允许您访问它

但是在运行时,运行时不需要检查是否允许您访问该变量。为什么?因为要运行程序,必须对其进行编译(除非您使用的是像JS这样的解释语言)。如果您试图访问一个不允许访问的变量,它甚至不会运行


因此,在运行时,运行时不需要担心是否可以访问变量,因此对性能没有影响。

请看,下面是访问修饰符如何影响运行时性能的一个例子。这个答案并不完整。在类加载时,也就是在运行时,字节码验证器检查您是否没有从没有此权限的代码中访问私有、受保护或包私有方法、字段和类。这项检查需要一些(最少)时间,但在加载类时只需要一次。这是有代价的。我认为你应该把它作为答案写出来。@ahmetozkok不能,因为这个问题是重复的-一个糟糕的问题,因为接受的答案是从另一个问题的答案复制而来的,但它不适用,因为该问题不是询问访问器方法。而且无论是重复的问题还是被接受的答案是从哪里复制来的,都没有考虑字节码验证器。这是非常基本的JVM内容,所以很惊讶这些答案如此混乱