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