对java平台的理解、java是解释执行吗?

(1)java平台是一个很宽泛的话题。首先,java语言有“一次编写,导出执行”的跨平台的特性,JVM为其屏蔽了硬件和操作系统的底层;在垃圾收集方面,它具有内存自动回收和分配机制;在java语言方面,它具有着泛型、Lambda、反射、面向对象等特性;除此之外,java有一些基础类库及第三方类库,如:集合、IO/NIO、并发、网络、安全;在日常使用的时候,我们需要在电脑上安装JRE和JDK,JRE是java运行时环境,其中包括JVM、java类库等,JDK是java开发工具,是JRE的超集,还有更多的工具,如编译器,各种诊断工具等。
(2)这句话不是很准确,首先java源代码编译(javac)称为.class文件,JVM的类加载器加载字节码到方法区后,JVM内置的解析器会解释执行,一行一行到把字节码转换为机器语言再运行,但是执行速度比较慢。
由于大部分程序都表现出“小部分热点代码消耗大部分的资源”,这里的热点代码就是高频率调用的代码块,类似“二八定律”,于是引入了JIT(方法级),也就是动态编译器,利用了在运行时进行热点代码编译的技术,直接将字节码编译为本地机器码,JIT会缓存编译过的代码到codecache里,且之后无需重复解释。 这样,降低了编译的时间!
因此,java采用的是解释和编译混合的模式!

(3)如果只是用解释器的话,就是失去JIT带来的性能优势;
如果只使用JIT的话,需要将所有的字节码编译成机器码,会耗费更多时间,且JVM启动会非常慢;增加了可执行代码长度的长度,增加了页面调度的次数,从而降低程序执行的效率;有些JIT编译器的优化方式,比如分支预测,如果不进行profiling,往往并不能进行有效优化。(不懂)
因此,JIT只编译热点部分的代码。
(4)java9引入了一种新的编译模式(AOT,Ahead Of Time Compilation),它是在编译期间直接将字节码编译为机器码,这样就避免了JIT预热等开销。但要付出一定的代价。

参考:极客时间《java核心技术36讲》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值