热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Java虚拟机JVM之server模式与client模式的区别

这篇文章主要介绍了Java虚拟机JVM的client模式和Server模式两者的区别和联系

JVM client模式和Server模式区别

JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升。

JVM工作在Server模式下可以大大提高性能,Server模式下应用的启动速度会比client模式慢大概10%,但运行速度比Client VM要快至少有10倍

当不指定运行模式参数时,虚拟机启动检测主机是否为服务器,如果是,则以Server模式启动,否则以client模式启动,J2SE5.0检测的根据是至少2个CPU和最低2GB内存

由于服务器的CPU、内存和硬盘都比客户端机器强大,所以程序部署后,都应该以server模式启动,获取较好的性能;
JVM在client模式默认-Xms是1M,-Xmx是64M;JVM在Server模式默认-Xms是128M,-Xmx是1024M;
server:启动慢,编译更完全,编译器是自适应编译器,效率高,针对服务端应用优化,在服务器环境中最大化程序执行速度而设计。
client:快速启动,内存占用少,编译快,针对桌面应用程序优化,为在客户端环境中减少启动时间而优化;

当JVM用于启动GUI界面的交互应用时适合于使用client模式,当JVM用于运行服务器后台程序时建议用Server模式。

我们可以通过运行:java -version来查看jvm默认工作在什么模式。

 

关于图一中的GCC

clien模式下,新生代选择的是串行gc,旧生代选择的是串行gc
server模式下,新生代选择的是并行回收gc,旧生代选择的是并行gc
一般来说我们系统应用选择有两种方式:吞吐量优先和暂停时间优先,对于吞吐量优先的采用server默认的并行gc方式,对于暂停时间优先的选用并发gc(CMS)方式。

其它延伸知识点

JDK有两种VM,VM客户端,VM服务器应用程序。这两种解决方案分享java运行环境的热点代码库,但使用不同的编译器,适用于客户机和服务器的独特的性能特点,这些差异包括编写内联政策和堆的默认值。

虽然服务器和客户端虚拟机类似,服务器VM已专门调整最大峰值操作速度。它的目的是执行长时间运行的服务器应用程序,它需要最快的运行速度超过一个快速启动时间或较小的运行时内存占用。

客户VM编译器是经典的虚拟机和实时升级(JIT)通过JDK的先前版本使用的编译器。客户端虚拟机提供了改进的运行应用程序和小程序的性能。java虚拟机的热点客户已减少应用程序的启动时间和内存占用特别调整,使其特别适合客户环境。在一般情况下,客户端系统更好的图形用户界面。

因此,真正的区别也在编译器级别上:

客户端虚拟机编译器不尝试执行由编译器在服务器虚拟机上执行的更复杂的优化,但在交换过程中,它需要较少的时间来分析和编译一段代码。这意味着客户端虚拟机可以更快地启动,并需要一个较小的内存占用。

服务器虚拟机包含一个先进的自适应编译器支持许多C++编译器的优化进行优化,同样的类型,以及一些优化,不能用传统的编译器完成的,比如积极的内联在虚拟方法调用。这是一个竞争和性能优势,静态编译器。自适应优化技术在它的方法是非常灵活的,通常优于甚至先进的静态分析和编译技术。

-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升,原因是:当虚拟机在-Client模式的时候,使用的是一个代号为C1的轻量级编译器,而-Server模式启动的虚拟机采用相对重量级代号为C2的编译器,C2比C1编译器编译的相对彻底,服务起来之后,性能高。

一般只要变更-server KNOWN与-client KNOWN两个配置的先后顺序即可,前提是JAVA_HOME/jre/bin目录下同时存在server和client两个文件夹,分别对应各自的jvm

说了这么多其实总结成一句话就是:

JVM Server模式下应用启动慢但运行速度快,JVM Client模式下应用启动快但运行速度要慢些

推荐:服务器上请以Server模式运行,面客户端或GUI模式下就以Client模式运行


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 题库来源:安全生产模拟考试一点通公众号小程序G3锅炉水处理报名考试是安全生产模拟考试一点通生成的,G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新 ... [详细]
  • 南方CASS专题系列:全面教程、视频讲解与插件汇总
    本专题系列涵盖南方CASS的完整教程、详细视频讲解及实用插件,旨在帮助用户快速掌握该软件。南方CASS基于CAD平台开发,集成了地形图绘制、地籍管理、空间数据建库、工程应用和土石方计算等多项功能,广泛应用于测绘、工程等领域。 ... [详细]
  • C语言基础入门:7个经典小程序助你快速掌握编程技巧
    本文精选了7个经典的C语言小程序,旨在帮助初学者快速掌握编程基础。通过这些程序的实践,你将更深入地理解C语言的核心概念和语法结构。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 2020初级电工模拟题库与实操视频指南
    本文提供2020年初级电工模拟考试题库及实操视频资源,涵盖最新大纲和真题解析,帮助考生高效备考。内容包括理论知识、实操技能以及详细答案解析,适用于全国各地区电工(初级)考试。 ... [详细]
  • 本教程将详细介绍Python中的包、模块、类和函数的概念,探讨它们在程序中的作用及相互关系,帮助读者更好地理解Python的结构化编程。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 国庆头像生成小程序体验
    介绍一个可以快速生成带有国旗元素的国庆头像的小程序,带您回顾这一流行趋势。 ... [详细]
  • 微信小程序:授权登录与手机号绑定
    本文详细介绍了微信小程序中用户授权登录及绑定手机号的流程,结合官方指引和实际开发经验,提供了一套完整的实现方案,帮助开发者更好地理解和应用。 ... [详细]
  • 在使用Netty 4.1.48版本运行自带的HTTP服务器示例时,观察到大量本地IP环回连接。本文将探讨这些环回连接的原因,并解释其与TCP连接的关系。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
author-avatar
手机用户2502862581
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有