JVM选项:-client vs -server
您是否曾经在运行Java应用程序时想知道-client或-server开关是什么? 例如:
javaw.exe -client com.blogspot.sdoulger.LoopTest
也显示在java.exe的“帮助”中,例如,其中的选项包括:
-client选择“客户端” VM
-server选择“服务器” VM
-client和-server系统之间有什么区别?
这两个系统是不同的二进制文件。 它们本质上是与同一运行时系统接口的两个不同的编译器(JIT)。 对于需要快速启动时间或较小占用空间的应用程序,客户端系统是最佳选择;对于整体性能最为重要的应用程序,服务器系统是最佳选择。 通常,客户端系统更适合于交互式应用程序,例如GUI。 其他一些差异包括编译策略,堆默认设置和内联策略。
根据“ Java HotSpot性能引擎架构 ”:
JDK包括两种VM:客户端产品和为服务器应用程序调整的VM。 这两个解决方案共享Java HotSpot运行时环境代码库,但是使用不同的编译器,这些编译器适合于客户端和服务器的独特性能特性。 这些差异包括编译内联策略和堆默认值。
JDK在发行版中同时包含这两个系统,因此开发人员可以通过指定-client或-server来选择所需的系统。
尽管服务器VM和客户端VM相似,但已经对服务器VM进行了特殊调整,以最大程度地提高峰值运行速度。 它用于执行长时间运行的服务器应用程序,这些应用程序需要比快速启动时间或较小的运行时内存占用更多的最快的运行速度。
客户端VM编译器可作为经典VM和早期JDK版本使用的即时(JIT)编译器的升级。 客户端VM为应用程序和小程序提供了改进的运行时性能。 Java HotSpot客户端VM经过特别调整,以减少应用程序启动时间和内存占用,使其特别适合客户端环境。 通常,客户端系统更适合GUI。
客户端VM编译器不会尝试执行服务器VM中由编译器执行的许多更复杂的优化,但是作为交换,它需要较少的时间来分析和编译一段代码。 这意味着客户端VM可以更快地启动,并且需要较小的内存空间。
注意:似乎性能差异的主要原因是优化的数量。
Server VM包含一个高级自适应编译器,该编译器支持通过优化C ++编译器执行的许多相同类型的优化,以及一些传统编译器无法完成的优化,例如跨虚拟方法调用的主动内联。 与静态编译器相比,这是一个竞争优势和性能优势。 自适应优化技术的方法非常灵活,通常甚至优于高级静态分析和编译技术。
两种解决方案都提供了极其可靠,安全和可维护的环境,可以满足当今企业客户的需求。
默认选项:
- 对于热点是客户端
- 对于JRockit是服务器
JRockit的客户端和服务器VM选项
JRockit也有这两个选项,默认为服务器选项(热点是客户端)。
JRockit客户端选项为-client,服务器为-jrockit。
关于性能差异的动手实例
摘自Onkar Joshi博客的示例证明了性能差异。
我们使用两个开关运行以下代码:
package com.blogspot.sdoulger;public class LoopTest {public LoopTest() {super();}public static void main(String[] args) {long start = System.currentTimeMillis();spendTime();long end = System.currentTimeMillis();System.out.println("Time spent: "+ (end-start));LoopTest loopTest = new LoopTest();}private static void spendTime() {for (int i =500000000;i>0;i--) {}}
}
注意:该代码仅被编译一次! 两次运行中的类都相同!
使用-client:
java.exe -client -classpath C:\ JDeveloper \ mywork \ Test_java_client-server_switches \ Project1 \ classes com.blogspot.sdoulger.LoopTest
花费时间:766
使用-server:
java.exe -server -classpath C:\ JDeveloper \ mywork \ Test_java_client-server_switches \ Project1 \ classes com.blogspot.sdoulger.LoopTest
花费时间:0
似乎是对服务器系统进行了更为积极的优化,因此删除了循环,因为它知道它不执行任何操作!
挖掘更多/来源:
- -client和-server系统之间有什么区别?
- http://java.sun.com/products/hotspot/whitepaper.html#1
- http://www.velocityreviews.com/forums/t130082-difference-between-client-server-classic-and-hotspot-jvms.html
- http://www.onkarjoshi.com/blog/174/hotspot-jvm-client-server-vm-optimization/
- http://stackoverflow.com/questions/198577/real-differences-between-java-server-and-java-client
参考:在Spyro的Log blog上, JCG合作伙伴 Spyros Doulgeridis提供的-client和-server JVM命令行选项之间的差异 。
- Java中的低GC:使用原语而不是包装器
- Java泛型快速教程
- JVM如何处理锁
- 使用迭代器时如何避免ConcurrentModificationException
翻译自: https://www.javacodegeeks.com/2011/07/jvm-options-client-vs-server.html
JVM选项:-client vs -server相关推荐
- jvm的client与server工作模式
[README] JVM Server模式与client模式启动,最主要的差别在于: -Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升. 原因是:当虚拟机运行在-clien ...
- jvm 参数-server_JVM选项:-client vs -server
jvm 参数-server 您是否曾经在运行Java应用程序时想知道-client或-server开关是什么? 例如: javaw.exe -client com.blogspot.sdoulger. ...
- java coap_分布式项目(三)CoAp client and server
上回说到Web manage的构建,完成的对产品,物模型中的属于数据,设备数据,并把对应的数据缓存到redis中,接下来就开始coap客户端和服务器的构建. coap 现阶段PC网络交互中较多的是使用 ...
- iOS 中client和server的 Web Service 网络通信 (1)
当你打开你手机上新浪微博应用或者知乎应用是.你是否会去想这些显示在手机上的图片和数据时从哪里来的?又是通过如何的方法实现的?好.那么接下来就介绍是如何实现的.过程又是怎么样的. 当我们浏览着 ...
- 【异常】 Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server.
[异常] Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server. ...
- 带入gRPC:gRPC Streaming, Client and Server
带入gRPC:gRPC Streaming, Client and Server 原文地址:带入gRPC:gRPC Streaming, Client and Server 项目地址:go-grpc- ...
- Java -- 网络编程(一):Client与Server之间的数据传送
目前对于我这种刚接触网络编程的豆芽来说,对网络编程最直观的了解就是:一些的Client和一个Server端之间的数据传递.具体当然是复杂的,但是那是我以后要学的. 今天我知道了可以通过Socket和D ...
- 通过smack client + openfire server 实现 peer to peer communication
[0]README 1)本文旨在 给出源代码 实现 smack client + openfire server 实现 peer to peer communication 2)当然,代码中用到的 u ...
- Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server
Phoenix链接异常,报错如下 0: jdbc:phoenix:xxx:2181:/hbase> Error: ERROR 726 (43M10): Inconsistent namespac ...
最新文章
- python中使用html前端页面显示图像预测结果(改进)
- python格式化% 和 format
- 基于PyQt5的快速开发框架QFramer
- 如何使用 FFmpeg 减小视频大小
- kali linux查看网卡_CentOS7.6安装无线网卡驱动|Linux如何安装网卡驱动|Linux如何让配置网卡...
- 成功安装mysql后,为何服务管理器里找不到MySQL服务名(解析篇)
- paip.哈米架构CAO.txt
- 愤怒的小鸟的html制作,如何做html5山寨版愤怒的小鸟
- PCL之统计异常值去除滤波器--StatisticalOutlierRemoval
- [转载] Python Pandas 的 all和any方法
- echart的x轴换行
- 主要厂商在大数据领域的布局状况
- ftl生成word文档
- python基于scrapy框架爬取当当图书信息
- MTK DDR进行ETT之后的压力---测试环境的搭建
- 第十二章 项目采购管理第六版
- 走进小程序【十一】微信小程序【使用Echarts 和 腾讯地图】
- 【Git版本控制】Git基础入门和分支管理
- GBase 8s 常用管理员命令汇总-gstat(下)
- av_seek_frame使用详解
热门文章
- 不相交集的求并算法(按集合大小求并+按高度求并)
- FeignClient调用服务及上传文件的注意点及问题
- HDU1576(欧几里得算法)
- vm 安装jdk1.8_JDK 13:VM.events已添加到jcmd
- java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...
- 通过Java和Spring Boot应用程序将Gmail用作SMTP服务器
- java jooq_将Java EE与jOOQ结合使用的初学者指南
- java转换为c#_C#vs Java哪一个更快? 将25k C#转换为Java(2)
- 从响应式Spring Data存储库流式传输实时更新
- 服务器日志记录_5种改善服务器日志记录的技术