jvm分层编译级别

编译级别有:
0:解释代码
1:简单C1编译代码
2:受限的C1编译代码
3:完全C1编译代码
4:C2编译代码

典型的编译日志可以显示,多数方法第一次编译的级别是3,即完全C1编译。(当然,所有方法都从级别0开始。)如果方法运行得足够频繁,它就会编译成级别4(级别3的代码就会被丢弃)。最常见的情况是:client编译器从获取了代码如何使用的信息进行优化时才开始编译。

如果server编译器队列满了,就会从server队列中取出方法,以级别2进行编译,在这个级别上,C1编译器使用方法调用计数器和回边计数器(但不需要性能分析的反馈信息)。这使得方法编译得更快,而方法也将在C1编译器收集分析信息之后被编译为级别3,最终当server编译器队列不太忙的时候被编译为级别4。

另一方面,如果client编译器全忙,原本排程在级别3编译的方法就既可以等待级别3编译,也适合进行级别4的编译。在这种情况下,方法编译会很快转到级别2,然后由级别2转到级别4。
那些不太重要的方法可以从级别2或级别3开始编译,但随后会因为它们的重要性没那么高而转为级别1。另外,如果server编译器出于某些原因无法编译代码,也会转为级别1。

当然,代码在逆编译时会转为级别0。
有些标志可以控制某些级别转换行为,但调优能够得到很乐观的结果。当方法按期望的顺序,即级别0→级别3→级别4编译时,性能可以达到最优。如果方法经常被编译为级别2,并且还额外有可用的CPU周期,那就可以考虑增加编译器的线程数,从而减少server编译器队列的长度。如果没有额外可用的CPU周期,那你唯一能做的就是尽力减小应用的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值