
文章图片
JVM底层原理之如何选用C1、C2编译器?它们有什么区别?
关于JVM底层的C1、C2编译器 , 很多人不知道它的具体概念 , 本篇我们详细的讲解一下 。
什么是C1?什么是C2?开发人员可以通过设置 , 控制虚拟机采用解释执行的方式或者是采用即时编译器的方式 , 配置如下:
- -Xint 采用解释器模式执行
- -Xcomp 采用即使编译器模式执行
- -Xmixed 采用解释器+即使编译器的混合模式共同执行
client模式是一种轻量级编译器 , 也叫C1编译器 , 占用内存小 , 启动快 , 耗时短 , 它会进行简单并可靠的优化 , 更注重效率 。
server模式是一种重量级编译器 , 也叫C2编译器 , 启动慢 , 占用内存大 , 耗时长 , 但编译的代码执行效率更高 , 甚至会根据性能监控信息进行一些不可靠的激进优化 , 更注重质量 。
JDK7以前选用C1或C2编译器①自动选择通常虚拟机会根据机器的硬件和操作系统自动选择运行C1还是C2 , 详情可以参考官方提供的手册:
②手动选择我们在启动程序的时候也可以通过手动去控制运行模式:
混合模式(Mixed Mode):使用解释器 + 其中一个JIT编译器 , 指令【-client】或【-server】 指定使用哪个JIT编译器 。 不加任何指令 , 默认启动也是此模式 。 解释模式(Interpreted Mode):只使用解释器 , 禁用JIT , 指令【-Xint】强制JVM使用解释模式 。 编译模式(Compiled Mode):只使用编译器 , 指令【-Xcomp】 优先使用编译模式将所有字节码编译成本地机器码 , 解释模式作为备用 。
相信有人注意到了标题 , 为什么特别的说是JDK7以前呢?难道JDK7以后就不用选了吗?
【jvm|JVM底层原理之如何选用C1、C2编译器?它们有什么区别?】没错 , 从JDK7开始 , Java引入了分层编译 , 关于分层编译的原理 , 我们在下篇继续讲解 。 想了解的小伙伴可以关注我 , 或从我的主页点进去查看哦~
- 联想又有一款机型即将升级到安卓12底层了|全球首发骁龙870 摩托神机edge s即将升级安卓12
- jvm|红米Note11T Pro的性价比真的有那么高吗?
- 联发科|少见!红米手机为联发科机型测试全新底层,首批MIUI14基本稳了
- dram|生产平台必须设置的几个JVM参数,你设置了吗?
- jvm|iQOO 10参数提前看,猜猜会卖多少钱?
- 网络安全|你知道盲盒营销的底层逻辑是什么吗?
- 苹果|“高层用华为、中层用小米、底层用苹果”,现实中真是如此吗?
- 邱峰电子1、不分咸、淡水域将深底层水中动物靶向控制使之浮起;2、按水的深浅调节电源、机内...|什么样的捕鱼器最吸鱼最先进的超声波吸鱼机
- jvm|很多海外博主拍视频说美国物价低,家电便宜,然后跟国内各种对比
- 小米科技|小米13系列规格再次被确认:系统为新底层,主打2K大屏,11月发
