「浅谈Java」八,JVM的类型和模式(一)
mhr18 2024-10-02 16:48 32 浏览 0 评论
【浅谈Java】主要针对Java开发技术知识的讲解。不会大而全详细讲解某一技术知识,只在短暂无事的时刻让你学习或温习Java知识体系中的一叶飘零。
相关文档传送门:
「浅谈Java」三,关键字synchronized同步机制-基础篇
server类型
上一篇文章中提到锁消除前提是java代码要运行在JVM server模式中。正确的说法应该是jvm server类型。在jvm 1.8版本jvm 只有server这种类型。
oracle官方给出的解释:
Currently only the Java HotSpot Server VM supports 64-bit operation, and the -server option is implicit with the use of -d64. This is subject to change in a future release
Java HotSpot服务器 VM 目前只支持64位操作,并且-Server选项是使用-d64隐式的。这可能会在将来的版本中更改
在jdk 1.8 文件夹\jre\lib\amd64 中 jvm.cfg 还看到server外client类型的痕迹。
client类型已经IGNORE(忽视)了。
server类型特点是应用系统启动慢,运行起来后,性能将会有很大的提升。server类型对应的编译器 对java代码功能有很多的优化。主要优化表现在 编译策略、默认堆大小、内嵌策略等等方面。总之server类型目的就是高性能的运行应用。
client类型
在jvm 1.8以前的版本,HotSpot虚拟机实现了两个即时编译器。分别是Client Complier和Server Complier,简称为C1、C2编译器。基于两种编译器实现了client类型和server类型。实际上client类型就是server类型的减配模式。Client VM的编译器摒弃了一些许多复杂的优化算法功能,换取使用较小的资源,快速的启动项目应用。没错,主要目的就是快速启动应用,运行代码。代价是运行时性能差于server类型。上篇逃逸分析client类型就没有。
类型选择使用
程序使用哪个编译器,取决于虚拟机运行的模式。HotSpot虚拟机会根据自身版本与宿主机器的硬件性能自动选择运行模式,用户也可以使用“-client”或“-server”参数去强制指定虚拟机运行在Client模式或Server模式。
%JAVA_HOME%\jre\bin下有一个server和client文件夹 分别对应server和client两种类型。
切换类型方式:
1)局部开启命令 java -client -version 或 java -server -version ;
2)全局配置 %JAVA_HOME%\jre\lib 文件夹下 i386或ia64 中的jvm.cfg 配置文件中
-client KNOWN
-server KNOWN
这两条命令配置,谁在前面就开启那种类型。
客户端內型和服务端內型是基于HotSpot虚拟机中内置了两个即时编译器:Client Complier和Server Complier。用Client Complier获取更高的编译速度,用Server Complier 来获取更好的编译质量。为什么提供多个即时编译器与为什么提供多个垃圾收集器类似,因为都是为了适应不同的应用场景。
HotSpot虚拟机可以根据自身版本与宿主机器的硬件性能自动选择运行模式,用户也可以使用上面介绍的两种方法选择运行类型。当然这受到jvm版本限制。
java -version
我们通过java -version 可以查看java版本性息,同时也可以看到jvm当前运行的类型。如下图所示:
第一行:版本信息;
第二行:运行环境;
第三行:JIT编译环境;
上图第三行JIT编译环境中mixed mode 才是VM 真正的mode。虽然jvm 1.8及其后续版本没有client类型类型,两种编译器(C1和C2)还存在,性能却随着版本升级不断提升和优化。何解?预知后事如何,且听下回分解。
【浅谈Java】预告下一篇文章JVM的工作模式。感谢阅读,求关注,求点赞。随手点赞,留有余香。学习是冰冻三尺非一日之寒,愿与诸君共勉励。
相关推荐
- Java面试宝典之问答系列(java面试回答)
-
以下内容,由兆隆IT云学院就业部根据多年成功就业服务经验提供:1.写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出的和以总和显示的SQL。SELECT...
- ADG (Active Data Guard) 数据容灾架构下,如何配置 Druid 连接池?
-
如上图的数据容灾架构下,上层应用如果使用Druid连接池,应该如何配置,才能在数据库集群节点切换甚至主备数据中心站点切换的情况下,上层应用不需要变动(无需修改配置也无需重启);即数据库节点宕机/...
- SpringBoot多数据源dynamic-datasource快速入门
-
一、简介dynamic-datasourc是一个基于SpringBoot的快速集成多数据源的启动器,其主要特性如下:支持数据源分组,适用于多种场景纯粹多库读写分离一主多从混合模式。支持...
- SpringBoot项目快速开发框架JeecgBoot——项目简介及系统架构!
-
项目简介及系统架构JeecgBoot是一款基于SpringBoot的开发平台,它采用前后端分离架构,集成的框架有SpringBoot2.x、SpringCloud、AntDesignof...
- 常见文件系统格式有哪些(文件系统类型有哪几种)
-
PART.01常见文件系统格式有哪些常见的文件系统格式有很多,通常根据使用场景(Windows、Linux、macOS、移动设备、U盘、硬盘等)有所不同。以下是一些主流和常见的文件系统格式及其特点:一...
- Oracle MySQL Operator部署集群(oracle mysql group by)
-
以下是使用OracleMySQLOperator部署MySQL集群的完整流程及关键注意事项:一、部署前准备安装MySQLOperator通过Helm安装Operator到Ku...
- LibreOffice加入"转向Linux"运动
-
LibreOffice项目正准备削减部分Windows支持,并鼓励用户切换到Linux系统。自Oracle放弃OpenOffice后,支持和指导LibreOffice开发的文档基金会对未来有着明确的观...
- Oracle Linux 10发布:UEK 8.1、后量子加密、增强开发工具等
-
IT之家6月28日消息,科技媒体linuxiac昨日(6月27日)发布博文,报道称OracleLinux10正式发布,完全二进制兼容(binarycompatibility...
- 【mykit-data】 数据库同步工具(数据库同步工具 开源)
-
项目介绍支持插件化、可视化的数据异构中间件,支持的数据异构方式如下MySQL<——>MySQL(增量、全量)MySQL<——>Oracle(增量、全量)Oracle...
- oracle关于xml的解析(oracle读取xml节点的属性值)
-
有时需要在存储过程中处理xml,oracle提供了相应的函数来进行处理,xmltype以及相关的函数。废话少说,上代码:selectxmltype(SIConfirmOutput).extract...
- 如何利用DBSync实现数据库同步(通过dblink同步数据库)
-
DBSync是一款通用型的数据库同步软件,能侦测数据表之间的差异,能实时同步差异数据,从而使双方始终保持一致。支持各种数据库,支持异构同步、增量同步,且提供永久免费版。本文介绍其功能特点及大致用法,供...
- MYSQL存储引擎InnoDB(八十):InnoDB静态数据加密
-
InnoDB支持独立表空间、通用表空间、mysql系统表空间、重做日志和撤消日志的静态数据加密。从MySQL8.0.16开始,还支持为模式和通用表空间设置加密默认值,这允许DBA控制在这些模...
- JDK高版本特性总结与ZGC实践(jdk高版本兼容低版本吗)
-
美团信息安全技术团队核心服务升级JDK17后,性能与稳定性大幅提升,机器成本降低了10%。高版本JDK与ZGC技术令人惊艳,且JavaAISDK最低支持JDK17。本文总结了JDK17的主要...
- 4 种 MySQL 同步 ES 方案,yyds!(两个mysql数据库自动同步的方法)
-
本文会先讲述数据同步的4种方案,并给出常用数据迁移工具,干货满满!不BB,上文章目录:1.前言在实际项目开发中,我们经常将MySQL作为业务数据库,ES作为查询数据库,用来实现读写分离,...
- 计算机Java培训课程包含哪些内容?其实就这六大块
-
不知不觉秋天已至,如果你还处于就业迷茫期,不如来学习Java。对于非科班小白来说,Java培训会更适合你。提前了解下计算机Java培训课程内容,会有助于你后续学习。下面,我就从六个部分为大家详细介绍...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Java面试宝典之问答系列(java面试回答)
- ADG (Active Data Guard) 数据容灾架构下,如何配置 Druid 连接池?
- SpringBoot多数据源dynamic-datasource快速入门
- SpringBoot项目快速开发框架JeecgBoot——项目简介及系统架构!
- 常见文件系统格式有哪些(文件系统类型有哪几种)
- Oracle MySQL Operator部署集群(oracle mysql group by)
- LibreOffice加入"转向Linux"运动
- Oracle Linux 10发布:UEK 8.1、后量子加密、增强开发工具等
- 【mykit-data】 数据库同步工具(数据库同步工具 开源)
- oracle关于xml的解析(oracle读取xml节点的属性值)
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)