第六篇 Java编译器与C/C++编译器的比较

概述:

       在Java虚拟机中,Java的“编译期”是个不确定的过程,它可以指一个前端编译器将.Java文件编译为.class文件;也有可能指将虚拟机的后端运行期将.class字节码文件编译为机器码的过程(JIT编译器);还可能指使用静态提前编译器(AOT编译器)直接把.java文件编译为本地机器代码的过程。

       Java编译器原理我们在这儿就不复习了,按照编译原理课程上老师的讲解就可以;不管是什么语言实现的编译器,原理都是一样的。

       现在详细比较下Java编译器和C/C++编译器:

Java编译器和C/C++编译器的比较:

        Java与C/C++编译器对比实际上代表了最经典的即时编译器与静态编译器的对比,很大程度上也决定了Java与C/C++的性能对比;因为虽然语言不同,编译的原理还是相同的。性能方面,除了各自的API之外,剩下的就是“拼编译器”和“拼输出代码质量”的游戏。

Java编译器与C/C++编译器对比之下,可能会产生以下劣势:

1、因为即时编译器(Java编译器)运行的时候占用的是用户程序的运行时间,具有很大的时间压力,它能提供的优化手段也严重受制于编译成本。如果编译速度不能达到要求,用户就可以感觉到。

2、Java语言是动态的类型安全语言,这就意味着需要由虚拟机来确定程序是不是违反了语言的语义或访问非结构化内存。从实现层面来看,这就意味着虚拟机必须频繁的进行动态检查,如检查实例是否空指针、数组是否越界等。这样总体上来说就消耗了很多运行时间。

3、Java语言虽然没有vir

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值