编译线程
当达到编译阈值时,方法或循环就是进入编译队列,在后台异步地获取队列的代码进行编译。
编译队列不是严格的先进先出,执行次数越多的代码具有更高的优先级。这也是在上一章节,我们通过标志PrintCompilation查看被编译方法时,compilationg_id不完全按顺序递增的原因。
使用不同的编译器,在不同平台下会有不同的线程数,与平台的cpu数有关。
通常来说,使用client编译器,则会开启一个线程;使用server编译器,则会开启两个线程。当开启分层编译时,将会开启多个线程,在不同的平台的CPU数量下,线程数也会不同,在分层编译器中,会将client编译器称为C1编译器,将server编译器称为C2编译器,我们下满就这么称呼它们,简单列举几个情况:
cpu数量 |
C1 |
C2 |
1 |
1 |
1 |
2 |
1 |
1 |
4 |
1 |
2 |
8 |
1 |
2 |