惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
S
SegmentFault 最新的问题
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
DataBreaches.Net
F
Fortinet All Blogs
TaoSecurity Blog
TaoSecurity Blog
D
Docker
C
Cybersecurity and Infrastructure Security Agency CISA
K
Kaspersky official blog
宝玉的分享
宝玉的分享
腾讯CDC
Google Online Security Blog
Google Online Security Blog
Recorded Future
Recorded Future
T
The Exploit Database - CXSecurity.com
T
The Blog of Author Tim Ferriss
V
V2EX
S
Securelist
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
CERT Recently Published Vulnerability Notes
A
Arctic Wolf
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
Y
Y Combinator Blog
P
Proofpoint News Feed
T
Tor Project blog
AWS News Blog
AWS News Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
博客园 - 聂微东
T
Threat Research - Cisco Blogs
B
Blog
Attack and Defense Labs
Attack and Defense Labs
L
Lohrmann on Cybersecurity
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
N
News and Events Feed by Topic
博客园 - 司徒正美
H
Help Net Security
C
Cisco Blogs
C
Check Point Blog
S
Secure Thoughts

博客园 - JAVA是老婆

今天来给智商充值 关于Java8函数式编程你需要了解的几点 【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现 【实战Java高并发程序设计 5】让普通变量也享受原子操作 【实战Java高并发程序设计 4】数组也能无锁:AtomicIntegerArray 【转】成为Java顶尖程序员 ,看这10本书就够了 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference 【实战Java高并发程序设计 2】无锁的对象引用:AtomicReference 一图搞定【实战Java高并发程序设计】 【实战Java高并发程序设计 1】Java中的指针:Unsafe类 如何提高Java并行程序性能?? 《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了 看JVM就推荐这本书 【Java】实战Java虚拟机之五“开启JIT编译” 实战Java虚拟机之四:提升性能,禁用System.gc() ? 实战Java虚拟机之三“G1的新生代GC” 实战Java虚拟机之一“堆溢出处理” 实战java虚拟机的学习计划图(看懂java虚拟机)
实战Java虚拟机之二“虚拟机的工作模式”
JAVA是老婆 · 2015-04-08 · via 博客园 - JAVA是老婆

今天开始实战Java虚拟机之二:“虚拟机的工作模式”。

总计有5个系列

   目前的Java虚拟机支持Client和Server两种运行模式。使用参数-client可以指定使用Client模式,使用参数-server可以指定使用Server模式。默认情况下,虚拟机会根据当前计算机系统环境自动选择运行模式。使用-version参数可以查看当前的模式,如下所示:

  1. ./java -version  
  2. java version "1.7.0_40"  
  3. Java(TM) SE Runtime Environment (build1.7.0_40-b43)  
  4. Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode, sharing)  

使用-server参数后,就可以得到如下输出:

  1. ./java -server -version  
  2. java version "1.7.0_40"  
  3. Java(TM) SE Runtime Environment (build1.7.0_40-b43)  
  4. Java HotSpot(TM) Server VM (build 24.0-b56, mixed mode)  


    与Client模式相比,Server模式的启动比较慢,因为Server模式会尝试收集更多的系统性能信息,使用更复杂的优化算法对程序进行优化。因此,当系统完全启动并进入运行稳定期后,Server模式的执行速度会远远快于Client模式。所以,对于后台长期运行的系统,使用-server参数启动对系统的整体性能可以有不小的帮助。但对于用户界面程序,运行时间不长,又追求启动速度,Client模式也是不错的选择。

从发展趋势上看,未来64位系统必然会逐步取代32位系统,而在64位系统中虚拟机更倾向于Server模式运行。

   虚拟机在Server模式和Client模式下的各种参数可能会有很大不同,读者如果需要查看给定参数的默认值,可以使用-XX:+PrintFlagsFinal参数。这里以JIT编译阈值和最大堆为例,展示Client模式和Server模式下两者的区别。

对于Client模式,参数如下: 

  1. ./java -XX:+PrintFlagsFinal -client -version  |grep -E ' CompileThreshold| MaxHeapSize'  
  2.      intx CompileThreshold                          = 1500            {pd product}  
  3.     uintx MaxHeapSize                              := 268435456       {product}  
  4. java version "1.7.0_40"  
  5. Java(TM) SE Runtime Environment (build1.7.0_40-b43)  
  6. Java HotSpot(TM) Client VM (build 24.0-b56, mixedmode, sharing)  

对于Server模式,参数如下:

  1. ./java -XX:+PrintFlagsFinal -server -version  |grep -E ' CompileThreshold| MaxHeapSize'  
  2.      intx CompileThreshold                          = 10000           {pd product}  
  3.     uintx MaxHeapSize                              :=1073741824      {product}  
  4. java version "1.7.0_40"  
  5. Java(TM) SE Runtime Environment (build1.7.0_40-b43)  
  6. Java HotSpot(TM) Server VM (build 24.0-b56, mixedmode)  

可以看到,在Client模式下,CompileThreshold默认值为1500,即函数被调用1500次后,会进行JIT编译(有关JIT编译的更多细节请参阅《实战Java虚拟机-jvm故障诊断与性能优化》第11章)。而在Server模式下,这个数值为10000。因此,Server模式下系统更有可能解释执行。而一旦进行编译,Server模式的优化效果会好于Client模式。其次,对于系统最大堆,在Client模式下为约256M,而在Server模式下约为1G。对于其他参数,读者可以使用类似的方式进行查找比较。

  • 实战Java虚拟机之一“堆溢出处理”
  • 实战Java虚拟机之二“虚拟机的工作模式”
  • 实战Java虚拟机之三“G1的新生代GC”
  • 实战Java虚拟机之四“禁用System.gc()”
  • 实战Java虚拟机之五“开启JIT编译”

节选自

《实战Java虚拟机》一书Q交流群:397196583