网站首页 > java教程 正文
JVM底层原理之如何选用C1、C2编译器?它们有什么区别?
关于JVM底层的C1、C2编译器,很多人不知道它的具体概念,本篇我们详细的讲解一下。
什么是C1?什么是C2?
开发人员可以通过设置,控制虚拟机采用解释执行的方式或者是采用即时编译器的方式,配置如下:
- -Xint 采用解释器模式执行
- -Xcomp 采用即使编译器模式执行
- -Xmixed 采用解释器+即使编译器的混合模式共同执行
hotspot虚拟机内嵌有两个JIT编译器,分别是Client Compiler 和Server Compiler,不过大多数情况下简称为C1和C2编译器
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以后就不用选了吗?
没错,从JDK7开始,Java引入了分层编译,关于分层编译的原理,我们在下篇继续讲解。想了解的小伙伴可以关注我,或从我的主页点进去查看哦~
猜你喜欢
- 2024-09-16 读Java性能权威指南(第2版)笔记08_即时编译器中
- 2024-09-16 Java @SuppressWarnings:抑制编译器警告-4
- 2024-09-16 PHP 8.0正式发布:支持JIT编译器,性能提升高达3倍
- 2024-09-16 「深入理解java虚拟机」(一) - 编译器和字节码文件
- 2024-09-16 学习廖雪峰的JAVA教程---泛型(擦拭法由编译器实现强制转型)
- 2024-09-16 JIT编译器的神奇之处:为什么Java如此快速
- 2024-09-16 JVM底层原理之什么是JIT编译器?什么是HotSpot VM?
- 2024-09-16 C语言/C++/Java 入门到项目 资料和编译器
- 2024-09-16 如何在maven pom.xml文件中设置Java编译器版本
- 2024-09-16 Java后端精选基础教程:准备 Java 编译环境「连载 2」
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)