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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页前台小知识

1.左右布局div块自适应,首先外边套一个div,把宽度固定一个px,然后margin设为0 atuo;这样他会根据窗口大小自动变换左右距离.就这么简单</p> 2.多个标签共用一个样式,用,分隔开 p…

统计字符串每个字符出现的次数

//str是个只包含小写字母的字符串&#xff0c;以下是统计每个字符出现的频数 int[] cnt new int[26];//toCharArray() for (char ch : str.toCharArray()) {cnt[ch - a]; }//charAt() for(int i 0;i<str.length;i){char ch str.charAt(i);cnt[ch - a]; }

在Java 7中处理文件

以下是The Well-Grounded Java Developer的草稿的修改后的片段。 它使您快速了解与以前版本相比&#xff0c;在Java 7中操作文件要容易得多。 通过使用新的Files类及其许多实用程序方法&#xff0c;您可以仅用一行代码就可以对文件执行以下操作&#xff1a; 创建 删除 复制 …

3.1存储管理操作系统

存储器管理的对象是主存&#xff08;内存&#xff09;。其主要功能包含分配和回收主存空间、提高主存的利用率、扩充主存、对主存信息实现有效保护。存储器的结构为&#xff1a;寄存去、缓存、主存、外存。逻辑地址&#xff08;对用户角度。程序存放的位置&#xff09;、物理地…

学习教材《构建之法》遇到的问题及思路

在学习中每个人都会遇到各种各样的问题&#xff0c;下面就是我遇到的问题及可能解决问题的思路。 1.如何写好程序的注释&#xff0c;每个人都会写注释&#xff0c;但是&#xff0c;需要注释什么&#xff1f; 思路&#xff1a;注释是为了解释程序做什么&#xff0c;为什么要这样…

了解和扩展Java ClassLoader

Java ClassLoader是项目开发中Java的关键但很少使用的组件之一。 就我个人而言&#xff0c;我从未在任何项目中扩展ClassLoader&#xff0c;但是拥有自己的可以自定义Java类加载的ClassLoader的想法让我感到很兴奋。 本文将概述Java类加载&#xff0c;然后继续创建自定义ClassL…

CAD教程-AL对其命令

AL可以实现不规则的对其功能 1.第一步按下AL&#xff0c;按下Enter 2.选择第一个源点 3.选择第一个目标点 4.选择第二个源点 5.选择第二个目标点 6.按下Enter&#xff0c;完成移位 转载于:https://www.cnblogs.com/weloveshare/p/4739873.html

使用Spring将POJO公开为JMX MBean

这是一个非常不错的教程&#xff0c;介绍了如何通过我们最新的JCG合作伙伴 “ The Holy Java ”博客&#xff08;很酷的名字&#xff09;实现“ 用Spring轻松将POJO作为JMX MBean公开 ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; Jav…

mysql 5.1由于Host为localhost的用户为空,密码为空,导致本地用户无法登陆。

不说了。直接上mysql的用户数据&#xff0c;第四列里面&#xff0c;host为localhost&#xff0c;用户为空&#xff0c;密码为空。 导致在本地登陆的时候除了root的账户外&#xff0c;其他账号不需要密码即可登陆&#xff0c;并且影响host为 %的用户登陆。 这里只需要删除对应的…

scala 88 for替换map,flatmap,filtermap,for,scala,flatmap

王家林亲授《DT大数据梦工厂》大数据实战视频“Scala深入浅出实战经典”视频、音频和PPT下载&#xff01;第88讲&#xff1a;Scala中使用For表达式实现map、flatMap、filter百度云盘&#xff1a;http://pan.baidu.com/s/1mgtgcIG360云盘&#xff1a;http://yunpan.cn/cdXsbctXf…

简单阐述下OC中UIImage三种创建方式~~~

一. 直接使用imageNamed进行创建 1 UIImage * image [UIImage imageNamed:"1.jpg"]; 简单说一下这种方式的优缺点&#xff1a; 优点&#xff1a;代码量少&#xff0c;一行代码就可以搞定。当程序中多次加载这张图片时&#xff0c;系统会指向同一块内存&#xff0c;…

(一二四)tableView的多组数据展示和手动排序

最近在写一个轻量级的网络游戏&#xff0c;遇到了技能优先顺序手动排序的需求&#xff0c;我就想到了iOS自带的tableView编辑功能&#xff0c;对其进行了初步探索&#xff0c;最后做出的效果如下图所示&#xff1a; 点击左边可以删除&#xff0c;拖住右边可以手动排序&#xff…

ARC_xp_20160530

1、 申请内存的地方在哪里&#xff1f;忘了...(应该是用的 malloc) 2、 键盘上按下一个键&#xff0c;处理的函数为&#xff1a;(所在的模块 应该是“CEGUIIrrlichtRenderer.dll”) 003B465F CC INT3 003B4660 /$ 53 PUSH EBX 003B4661 |. 56 …

Hibernate映射集合性能问题

首先&#xff0c;这篇文章的灵感来自于Burt Beckwith在2011年1月27日于SpringOne 2GX上发表的有关高级GORM –性能&#xff0c;定制和监控的演讲 。 简而言之&#xff0c; Burt Beckwith讨论了使用映射集合和GORM中的Hibernate 2级缓存的潜在性能问题&#xff0c;以及避免此类性…

算法:1!+(1!+3!)+(1!+3!+5!) + ( 1! + 3! + 5! + 7! + 9!)+....+(1!+3!+5!+ ... + m!)...

-(void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{ //算法入口 [self func2:9]; } //计算阶乘 factor&#xff08;m&#xff09;&#xff1d; m&#xff01; -(int)factor:(int)m{ int factorNum0; if(m0|m1) return 1; e…

知道这 20 个正则表达式,能让你少写 1,000 行代码

CocoaChina05-13正则表达式&#xff0c;一个十分古老而又强大的文本处理工具&#xff0c;仅仅用一段非常简短的表达式语句&#xff0c;便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话&#xff0c;能够使你的开发效率得到极大的提升。下面是技匠整理的&#x…

用Jackson进行Java JSON处理

JSON &#xff08;Javascript对象符号&#xff09;正成为一种非常流行的数据交换格式。 在使用诸如YUI&#xff0c;ExtJS&#xff0c;DOJO等Javascript框架开发Web应用程序时&#xff0c;我们可以使用XML或JSON在客户端和服务器之间交换数据。 通常&#xff0c;我们从服务器获得…

Android Togglebutton 默认背景被放大

1 . 最近在项目中自定义toggleButton 发现背景图放入后 &#xff0c;比美工给我的原图要大很大 2. 为什么&#xff1f; 3.比较ToggleButton 和TextView源码 发现, toggleButton 设置了minWidth 和minHeigh &#xff0c;导致我的背景小图被拉伸。 4.解决这种问题&#xff1a; 重…

MapReduce:简单介绍

MapReduce是Google流行的一种并行编程技术。 它用于处理大量数据。 仅通过将工作并行分配给多台机器&#xff0c;就可以在合理的时间内完成这种处理。 每台机器都处理一小部分数据。 MapReduce是一种编程模型&#xff0c;使开发人员可以专注于编写处理数据的代码&#xff0c;而…

python翻译词典实例

#!/usr/bin/python # -*- coding:utf-8 -*- #通过有道翻译来进行内容翻译 import urllib2 import urllib import json #---------翻译方法定义 start---------# def transfer( transferStr , lanSource auto ): data {type:lanSource,i:transferStr,doctype:json,xmlVersion:1…