解释器和编译器的特点
- 当程序需要快速启动和执行的时候,解释器可以先发挥作用,省去编译的时间,立即执行。在程序运行后随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获取更高的执行效率
- 当程序的运行环境中内存资源限制较多比如部分嵌入式系统中,可以使用解释器执行能够节约内存空间,反之可以使用编译器来执行提升执行效率
目前java的jvm产品比如hotspot都是既有解释器又有编译器的
JIT(just in time) compilcation 即时编译
Hotspot虚拟机中内置了两个即时编译器:Client Complier和Server Complier简称 C1,C2编译器分别用在客户端运行模式和服务器运行模式
目前主流的Hotspot虚拟机默认采用解释器与其中的一个编译器直接配合进行工作。至于使用哪个编译器取决于虚拟机的运行模式
HotSpot虚拟机会根据自身的版本与宿主机的硬件性能自动选择运营模式,用户也可以直接指定的形式“-client”或者“-server”参数去强制指定虚拟机运行在Client模式还是Server模式
两种即时编译器的区别
- 用Client Complier获取更快的编译速度,Server Complier可以获取更高的编译质量 提供即时编译器与提供多个垃圾收集器类似 目的是为了适应不同的应用场景
- Client Complier 简单快速的编译器主要关注局部优化 而放弃耗时较长的全局优化
- Server Complier专门面向服务器端,并未服务端的性能配置特别的调整的编译器,是一个充分优化过的高级的编译器
不指定参数的情况下 jvm启动时候根据硬件条件和操作系统自动选择是Server还是Client模式
32位操作系统 如果是windows 默认使用client类型的jvm 其他的操作系统 如果机器配置超过2G同时又2个以上的cpu默认使用server 否则使用 client模式
64位操作系统 只有server类型 不支持client模式