百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

「浅谈Java」八,JVM的类型和模式(一)

mhr18 2024-10-02 16:48 32 浏览 0 评论

【浅谈Java】主要针对Java开发技术知识的讲解。不会大而全详细讲解某一技术知识,只在短暂无事的时刻让你学习或温习Java知识体系中的一叶飘零。


相关文档传送门:

「浅谈Java」三,关键字synchronized同步机制-基础篇

「浅淡Java」四,synchronized的锁优化和升级

「浅谈Java」五,synchronized中锁的获取和释放

「浅谈Java」六,自旋锁

「浅谈Java」七,锁消除

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培训课程内容,会有助于你后续学习。下面,我就从六个部分为大家详细介绍...

取消回复欢迎 发表评论: