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.pswp.cn/news/374622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374622.shtml
英文地址,請注明出處:http://en.pswp.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…