【发布时间】:2018-09-24 00:51:19
【问题描述】:
我基本上知道 JVM 可以在 内联一个方法之后做一些事情,例如 scalar replacement、escape analysis 或 lock elision 等(我承认我不知道所有这些) .但是如果一个方法太大而不能内联怎么办? JVM 是否可以对这些方法进行任何优化?我在想loop unrolling 会是一个......
知道这个主题的人可能会有所启发吗?
【问题讨论】:
-
“关于那些方法”? “太大而无法内联”的方法仍然可以得到优化。更有趣的部分是该方法的调用者,或者调用者和被调用者之间的交互。
-
@Holger 我理解它可以,它不像它永远在解释模式下运行......
-
我不太明白这个问题。 JIT 编译单元是一种方法。 JVM 可以将几乎所有的优化应用到一个大的非内联方法上,尽管优化的范围会受到这个方法的范围的限制。
-
例如逃逸分析将在这个大方法中完美运行;如果不转义这个方法,分配和锁仍然可以被消除。
-
@apangin 我认为只有在方法被内联时才会进行转义分析,不是吗?我只尝试过一次查看
scalar replacement,除非内联方法,否则不会发生这种情况,因此我认为只有在内联发生时才会发生其他优化