方法/字段可见性如何影响 Java 中的方法内联?
我想到的情况类似于字段的public
吸气剂private
:
private Thing blah;
public Thing getBlah() {
return blah;
}
这里出现了几个问题。
一方面,Java 编译器本身是否进行内联?这个问题似乎有不同的回答,有人说是,有人说不是。我不知道那是因为它以前不做任何内联,但现在做了,还是只是有些人是对的,有些人是错的......
现在,如果它确实做了一些内联,我是否认为它不可能内联getBlah()
调用?它们显然是内联有用的地方,因为该方法非常简单,并且调用方法的开销与方法本身的代码一样大。但是如果它被编译器内联,你最终会得到private
直接访问字段的字节码;那么JVM肯定会抱怨吗?(即使这种方法是 . 也适用static final
。)
其次,JIT 编译器呢?据我所知,当涉及到该级别的内联时,这个问题并不适用。一旦生成本机代码,JVM 就已经完成了检查,并确认我可以调用该方法(因为它是public
);因此它可以生成内联调用的本机代码,而不会出现任何可见性问题......是吗?