java的即时编译器特点

java的即时编译器
1)因为即时编译器运行占用的是用户程序的运行时间,具有很大的时间压力,它能提供的优化手段也严重受制于编译成本,如果编译速度不能达到要求,那用户将在启动程序或程序的某部分察觉到重大延迟,这点使得即时编译器不敢随便引入大规模的优化技术,而编译的时间成本在静态编译器中并不需要关注。
2)Java语言是动态的类型安全语言,这就意味着需要由虚拟机来确保程序不会违反语言语义或访问非结构化的内存。从实现层面上看,这就意味着虚拟机必须频繁地进行动态检查,如实例方法访问时检查空指针、数组元素访问时检查上下界范围等。对于这类程序代码没有明确地写出检查行为,尽管编译器会努力优化,但是总体上仍然消耗不少时间
3)java语言虽然没有virtual关键字,但是使用虚方法的频率却远远大于C++/C语言,这意味着运行时对方法接收者进行多台选择的频率远远大于C/C++,也意味着即时编译器在进行一些优化时的难度大于C/C++。
4)java语言是可以动态扩展的语言,运行时加载新的类可能改变程序类型的继承关系,这使得很多全局优化都难以进行,因为编译器无法看见程序的全貌,许多全局的优化措施都只能以基激进的方式来完成,编译器不得不时刻注意并随着类型的变化而在运行时撤销或重新进行一些优化。

5)java语言中对象的内存分配是在堆上分配的,只有方法中的局部变量才在栈上分配,而C++/C的对象有多种内存分配方式,既可以在堆上也可以在栈上分配,如果可以在栈上分配线程私有对象,将减轻内存回收的压力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值