JIT编译器

JIT编译器全名 just in time compile 也就是即时编译器,把经常运行的代码作为“热点代码”编译成与本地平台相关的机器码,进行各层次的优化。JIT编译器除了有缓存的功能外,还会对代码进行各种优化,包括逃逸分析、锁消除、锁膨胀、方法内联、空值检查消除、类型检查消除异己公共子表达式消除等。

逃逸分析:

逃逸分析的基本行为就是分析对象动态作用域,当一个对象在方法中被定义之后,他可能会被外部方法所引用,例如作为调用参数传递到其他地方中,称为方法逃逸。

JIT编译器的优化包括如下:

同步省略:也就是锁消除,当JIT编译器判断不会发生并发问题,那么会将synchronize去掉

标量替换:

标量(scalar):是指一个无法再分解成更小的数据的数据。Java中原始数据类型就是标量。

聚合量(aggregate):是指还可以分解的数据。Java中的对象就是聚合量,因为他可以分解成其他聚合量和标量。

 

 

在JIT阶段,如果经过逃逸分析,发现一个对象不会被外界访问的话,那么经过JIT优化,就会把这个对象拆解成若干个其中包含的若干个成员变量来代替。这个过程就是标量替换。

标量替换的好处就是对象不用在堆内存进行分配,为栈上分配提供了良好的基础。

 

那么逃逸分析技术存在哪些缺点呢?

技术不是特别成熟,分析过程很耗时,如果没有一个对象是不逃逸的,那么久得不偿失了。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值