自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JVM優(yōu)化配置指導(dǎo)手冊

開發(fā) 后端
這里首先要說明的是這里提到的JVM優(yōu)化配置是Sun的HotSpotJVM5和以上的版本。JVM性能優(yōu)化在應(yīng)用方面可以有很多手段,包括Cache,多線程,各種算法等等。

本文向大家簡單介紹一下JVM優(yōu)化配置的概念,通常情況下是不建議在沒有任何統(tǒng)計和分析的情況下去手動配置JVM的參數(shù)來調(diào)整性能,因為在JVM5以上已經(jīng)作了根據(jù)機器和OS的情況自動配置合適參數(shù)的算法,基本能夠滿足大部分的情況。

JVM優(yōu)化配置

這里首先要說明的是這里提到的JVM是Sun的HotSpotJVM5和以上的版本。性能優(yōu)化在應(yīng)用方面可以有很多手段,包括Cache,多線程,各種算法等等。通常情況下是不建議在沒有任何統(tǒng)計和分析的情況下去手動配置JVM的參數(shù)來調(diào)整性能,因為在JVM5以上已經(jīng)作了根據(jù)機器和OS的情況自動配置合適參數(shù)的算法,基本能夠滿足大部分的情況,當(dāng)然這種自動適配只是一種通用的方式,如果說真的要達(dá)到***,那么還是需要根據(jù)實際的使用情況來手動的配置各種參數(shù)設(shè)置,提高性能。

JVM能夠?qū)π阅墚a(chǎn)生影響的***部分就是對于內(nèi)存的管理。從jdk1.5以后內(nèi)存管理和分配有了很多的改善和提高。內(nèi)存分配以及管理的幾個基本概念和參數(shù)說明:

◆JavaHotspotMode:

server和client兩種模式,如果不配置,JVM會根據(jù)應(yīng)用服務(wù)器硬件配置自動選擇模式,server模式啟動比較慢,但是運行期速度得到了優(yōu)化,client啟動比較快,但是運行期響應(yīng)沒有server模式的優(yōu)化,適合于個人PC的服務(wù)開發(fā)和測試。

◆GarbageCollectorPolicy:

在Jdk1.5的時候已經(jīng)提供了三種GC,除了原來提供的串行GC(SerialGC)以外,還提供了兩種新的GC:ParallelGC和ConcMarkSweepGC。ParallelGC采用了多線程并行管理和回收垃圾對象,提高了回收效率,提高了服務(wù)器的吞吐量,適合于多處理器的服務(wù)器。

◆ConcMarkSweepGC

采用的是并發(fā)方式來管理和回收垃圾對象,降低垃圾回收產(chǎn)生的響應(yīng)暫停時間。這里說一下并發(fā)和并行的區(qū)別,并發(fā)指的是多個進(jìn)程并行執(zhí)行垃圾回收,那么可以很好的利用多處理器,而并行指的是應(yīng)用程序不需要暫??梢院屠厥站€程并發(fā)工作。串行GC適合小型應(yīng)用和單處理器系統(tǒng)(無需多線程交互,效率比較高),后兩者適合大型系統(tǒng)。
使用方式就是在參數(shù)配置中增加-XX:+UseParallelGC等方式來設(shè)置。

對于這部分的JVM優(yōu)化配置在網(wǎng)上有很多的實例可以參考,不過最終采用哪一種GC還是要根據(jù)具體的情況來分析和選擇。

Heap:

OOM的各種經(jīng)歷已經(jīng)讓每一個架構(gòu)師開發(fā)人員看到了了解Heap的重要性。OOM已經(jīng)是Heap的臨界點,不得不引起注意,然而Heap對于性能的潛在影響并未被引起重視,不過和GC配置一樣,在沒有對使用情況作仔細(xì)分析和研究的情況下,貿(mào)然的去修改Heap配置,可能適得其反,這里就來看一下Heap的一些概念和對于性能的影響。

我們的應(yīng)用所能夠得到的***的Heap受三部分因素的制約:數(shù)據(jù)處理模型(32位或者64位操作系統(tǒng)),系統(tǒng)地虛擬內(nèi)存總數(shù)和系統(tǒng)的物理內(nèi)存總數(shù)。首先Heap的大小不能超過不同操作系統(tǒng)的進(jìn)程尋址范圍,當(dāng)前大部分系統(tǒng)***限度是4G,Windows通常是2G,Linux通常是3G。系統(tǒng)的虛擬內(nèi)存也是分配的依據(jù),首先是不能超過,然后由于操作系統(tǒng)支持硬盤來做部分的虛擬內(nèi)存,如果設(shè)置過大,那么對于應(yīng)用響應(yīng)來說勢必有影響。再則就是要考慮同一臺服務(wù)器上運行多個Java虛擬機所消耗的資源總合也不能超過可用資源。就和前面OOM分析中的一樣,其實由于OS的數(shù)據(jù)處理模型的限制,機器本身的硬件內(nèi)存資源和虛擬內(nèi)存資源并不一定會匹配,那么在有限的資源下如何調(diào)整好資源分配,對于應(yīng)用來說尤為重要。#p#

JVM優(yōu)化配置中關(guān)于Heap的幾個參數(shù)設(shè)置:

說了Heap的有限資源問題以后,就來看看如何通過配置去改變JVM對于Heap的分配。下面所說的主要是對于JavaHeap的分配,那么在申請了JavaHeap以后,剩下的可用資源就會被使用到NativeHeap。
Xms:javaheap初始化時的大小。默認(rèn)情況是機器物理內(nèi)存的1/64。這個主要是根據(jù)應(yīng)用啟動時消耗的資源決定,分配少了申請起來會降低啟動速度,分配多了也浪費。

Xmx:javaheap的***值,默認(rèn)是機器物理內(nèi)存的1/4,***也就到1G。

這個值決定了最多可用的JavaHeapMemory,分配過少就會在應(yīng)用需要大量內(nèi)存作緩存或者零時對象時出現(xiàn)OOM的問題,如果分配過大,那么就會產(chǎn)生上文提到的第二類OOM。所以如何配置還是根據(jù)運行過程中的分析和計算來確定,如果不能確定還是采用默認(rèn)的配置。

Xmn:javaheap新生代的空間大小。

在GC模型中,根據(jù)對象的生命周期的長短,產(chǎn)生了內(nèi)存分代的設(shè)計:青年代(內(nèi)部也分成三部分,類似于整體劃分的作用,可以通過配置來設(shè)置比例),老年代,持久代。每一代的管理和回收策略都不相同,最為活躍的就是青年代,同時這部分的內(nèi)存分配和管理效率也是***。通常情況下,對于內(nèi)存的申請優(yōu)先在新生代中申請,當(dāng)內(nèi)存不夠時會整理新生代,當(dāng)整理以后還是不能滿足申請的內(nèi)存,就會向老年代移動一些生命周期較長的對象。

這種整理和移動會消耗資源,同時降低系統(tǒng)運行響應(yīng)能力,因此如果青年代設(shè)置的過小,就會頻繁的整理和移動,對性能造成影響。那是否把年青代設(shè)置的越大越好,其實不然,年青代采用的是復(fù)制搜集算法,這種算法必須停止所有應(yīng)用程序線程,服務(wù)器線程切換時間就會成為應(yīng)用響應(yīng)的瓶頸(當(dāng)然永遠(yuǎn)不用收集那么就不存在這個問題)。老年代采用的是串行標(biāo)記收集的方式,并發(fā)收集可以減少對于應(yīng)用的影響。

Xss:線程堆棧***值。允許更多的虛擬內(nèi)存空間地址被JavaHeap使用。上面介紹了一下關(guān)于JVM優(yōu)化配置的理論知識,下面看一下幾個例子。

以下是sun公司的性能優(yōu)化白皮書中提到的幾個例子:

1.對于吞吐量的調(diào)優(yōu)。機器配置:4G的內(nèi)存,32個線程并發(fā)能力。

java-Xmx3800m-Xms3800m-Xmn2g-Xss128k-XX:+UseParallelGC-XX:ParallelGCThreads=20
-Xmx3800m-Xms3800m配置了***JavaHeap來充分利用系統(tǒng)內(nèi)存。
-Xmn2g創(chuàng)建足夠大的青年代(可以并行被回收)充分利用系統(tǒng)內(nèi)存,防止將短期對象復(fù)制到老年代。
-Xss128減少默認(rèn)***的線程棧大小,提供更多的處理虛擬內(nèi)存地址空間被進(jìn)程使用。
-XX:+UseParallelGC采用并行垃圾收集器對年青代的內(nèi)存進(jìn)行收集,提高效率。
-XX:ParallelGCThreads=20減少垃圾收集線程,默認(rèn)是和服務(wù)器可支持的線程***并發(fā)數(shù)相同,往往不需要配置到***值。

2.嘗試采用對老年代并行收集

java-Xmx3550m-Xms3550m-Xmn2g-Xss128k-XX:+UseParallelGC-XX:ParallelGCThreads=20-XX:+UseParallelOldGC
-Xmx3550m-Xms3550m內(nèi)存分配被減小,因為ParallelOldGC會增加對于NativeHeap的需求,因此需要減小JavaHeap來滿足需求。
-XX:+UseParallelOldGC采用對于老年代并發(fā)收集的策略,可以提高收集效率。

3.提高吞吐量,減少應(yīng)用停頓時間

java-Xmx3550m-Xms3550m-Xmn2g-Xss128k-XX:ParallelGCThreads=20-XX:+UseConcMarkSweepGC-XX:+UseParNewGC-XX:SurvivorRatio=8-XX:TargetSurvivorRatio=90-XX:MaxTenuringThreshold=31
-XX:+UseConcMarkSweepGC-XX:+UseParNewGC選擇了并發(fā)標(biāo)記交換收集器,它可以并發(fā)執(zhí)行收集操作,降低應(yīng)用停止時間,同時它也是并行處理模式,可以有效地利用多處理器的系統(tǒng)的多進(jìn)程處理。

-XX:SurvivorRatio=8-XX:MaxTenuringThreshold=31表示在青年代中Eden和Survivor比例,設(shè)置增加了Survivor的大小,越大的survivor空間可以允許短期對象盡量在年青代消亡。
-XX:TargetSurvivorRatio=90允許90%的空間被占用,超過默認(rèn)的50%,提高對于survivor的使用率。
類似的例子網(wǎng)上很多,這兒就不在列下來了,最終是否采取自己配置來替換默認(rèn)配置還是要根據(jù)虛擬機的使用情況來分析和配置。

【編輯推薦】

  1. 配置JVM內(nèi)存分配的妙招
  2. JVM、JRE、JDK的區(qū)別和聯(lián)系
  3. Java環(huán)境變量配置方法詳解
  4. 實例解析Linux平臺的JVM性能評測
  5. 深入JVM:ClassLoader相關(guān)知識簡介
責(zé)任編輯:佚名 來源: javaeye.com
相關(guān)推薦

2010-06-03 14:55:59

Hadoop配置

2010-09-26 14:44:31

JVM內(nèi)存監(jiān)控工具

2009-12-22 11:14:38

WCF禁用安全配置

2010-06-07 18:12:39

mrtg 安裝

2010-09-27 10:54:53

JVM參數(shù)配置

2010-01-05 11:26:27

.net Framew

2010-07-15 09:10:08

Perl函數(shù)手冊

2010-01-04 16:17:50

Silverlight

2009-12-18 15:49:05

Ruby Rmagic

2010-09-27 15:39:37

JVM監(jiān)控工具

2010-06-04 17:21:48

2010-06-04 17:34:13

Hadoop0.20.

2009-12-30 17:14:03

Silverlight

2014-12-24 10:24:55

Java

2010-05-19 18:03:07

2010-05-19 18:26:28

SVN服務(wù)器安裝

2010-08-04 11:23:15

Flex字符串

2010-10-08 14:31:46

Javascriptsplit函數(shù)

2010-09-27 15:54:19

JVM監(jiān)控工具

2009-12-31 15:58:11

Silverlight
點贊
收藏

51CTO技術(shù)棧公眾號