Java内置两种即时编译器,C1(client)和C2(server)。
如图,有4种编译路径,起点都是解释执行,终点有两种。即在no profilling和c2两处终止即使编译。
从 Java 8 开始,Java 虚拟机默认采用分层编译的方式。它将执行分为五个层次,分为为 0 层解释执行,1 层执行没有 profiling 的 C1 代码,2 层执行部分 profiling 的 C1 代码,3 层执行全部 profiling 的 C1 代码,和 4 层执行 C2 代码。
通常情况下,方法会首先被解释执行,然后被 3 层的 C1 编译,最后被 4 层的 C2 编译。
原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2819