java编译器1

本文探讨了Java语言如何实现跨平台特性的原理,详细介绍了Java编译过程中的字节码生成及其运行机制,并讨论了Java即时编译器(JIT)如何提高执行效率。
  1. java的跨平台
         java是跨平台的语言,跨平台特性是由java编译的字节码完成的。开发者编写完java程序后,将由编译器(javac或者eclipse的ecj)将源码编译成.class文件,即所谓的字节码。该字节码独立于平台之上,由jvm直接解析,不同平台有不同的jvm,这样便实现了java语言的跨平台特性。
         javac和ecj的区别在于,javac是全量编译,ecj是增量编译,在大多数场合下ecj的编译效果好于javac。当在eclipse下面编写源码保存后,已经编译好的文件将不会重新编译,只对有改变的文件进行编译,这便是增量型编译。
  2. java编译过程
        java编译器首先将.java源码文件编译成.class文件,当启动程序的时候,由jvm对.class文件解释执行。但java引入了JIT(Just In Time)实习热点探测功能。热点探测即JIT将java语言对使用次数较多的方法体或者循环体直接编译成机器码,以后便直接使用机器码执行。
        内嵌编译器JIT有两类,一是Client Compiler, 该编译器关注的是编译的速度,二是Server Compiler, 该编译器关注的是编译的质量。
        有两种方法可以实现热点探测,一是基于采样的热点探测(容易受到线程阻塞和别的外界因素影响),一是基于计数器的热点探测(方法调用计数器、回边计数器)。Hotpot采用的是基于计数器的热点探测。
  3. java是编译型,解释型?
        基于以上的内容,java到底是编译型还是解释型的呢?java在编译字节码的时候确实是编译器的功劳,而在执行的时候是由jvm解释执行。但是话又说回来机器码不也是被机器解释执行的吗?因此不能简单的直接定义java是编译型或是解释型。我们可以说java是编译解释共存的结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值