日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jvm常见参数介绍

發布時間:2024/4/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jvm常见参数介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

格式一般都是由-X構成-Xms:如果在運行的時候給定這個參數,表示初始化堆大小,這個堆是包含了Eden,包含了old,整個堆的初始化大 小,比如你給他800M,那它就會根據800M去分配年輕代和老年代,及持久代-Xmx: 最大堆大小,初始是多大,如果不夠最多能夠申請到多大,允許申請的最大大小-XX:NewSize=n 這個是設置年輕代的大小,上面兩個顆粒度更粗一些,這里的顆粒度很細一些,這里是年輕代的 大小-XX:NewRatio=n 這里也是設置年輕代的大小,不同的是NewSize給的是具體的單位,比如800M,500M,ratio是 比率,按照多大的比率去設置各代的大小-XX:SurvivorRatio=n Survivor比例是設置Suvivor區的比例,是s0和s1相對于Eden區域的大小, 年輕代默認的比例是8:1:1,8是Eden,1和1是s0和s1,那么我們可能會根據需要去調整,縮小Eden區的大小, 擴大Survivor區的大小,s0或者s1的大小,那么我們就可以用這個命令了,不讓他8:1:1走-XX:MaxPermSize=n Permanent單詞,持久的單詞以上這部分是設置內存空間的大小往下是設置收集器的-XX:+UseSerialGC 設置串行收集器來手機年輕代-XX:+UseParallelGC 如果我想用Parallel并行收集器-XX:+UseParallelOldGC 如果我們想要老年代的并行收集器就用它-XX:+UseConcMarkSweepGC 注意CMS不叫ConcurrentMarkSweep,它簡寫了,這后面不需要跟任何的參數,這個 是收集器的指定以上這塊是對收集器的指定 在JAVA的lang包下,其實也提供了通過代碼能夠獲取JVM信息的類的實現,

我現在縮寫的這一塊代碼就是能夠獲取當前JVM當中的虛擬機的信息,除了能夠通過命令來獲取以外,我們還可以 通過代碼來實現 import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; import java.util.List;public class Test{public static void main(String[] args) throws InterruptedException { List<GarbageCollectorMXBean> list = ManagementFactory.getGarbageCollectorMXBeans();for (GarbageCollectorMXBean gc : list) {System.out.println(gc.getName());}}}PS Scavenge PS MarkSweep 通過ManagementFactory的工具類去獲取當前虛擬機的回收器的信息,但是虛擬機有幾個回收器,有幾個收集器,新生代有一個,老年代也得有,它返回的能是一個嗎?能只返回一個GC嗎,答案是不能,所以它返回的是一堆,其實就是兩個,所以返回一個list, GargabageCollectorMXBean封裝虛擬機當前的信息,通過每個對象的getName就可以獲取到他虛擬機現在正在用的回收器的名稱,現在我用的JDK是1.7的

第一個輸出的是年輕代的Scavenge, 第二個是老年代的MarkSweep,說明年輕代用的是Parallel Scanvenge,年輕代在1.7.2這個版本JDK里,年輕代的收集器是Parallel Scavenge,然后永久代用的CMS,CMS能不能和他配合著工作

我現在還可以去改它的收集器,你想去用什么你就去改什么,比如我們相擁 Serial GC,就使用命令-XX:+UseSerialGC,然后怎么去給你的虛擬機去設置這些命令呢,我們要想一點,肯定是虛擬機啟動時指定的,3而不是在虛擬機運行時給定的,以往我們是點右鍵 Run,現在我們是Run Configuration

找到你要執行文件的arguments參數選項

然后在這里把你的參數加進去

以上的參數都可以加進去,并且他們之間不需要通過逗號分隔,直接用空格分隔就可以了,我現在改收集器了,改了一個新生代的收集器,Serial GC就是新生代的收集器,一運行就打印出

新生代輸出的名字并不叫Serial,而是Copy然后我們再換一個收集器

G1是一個收集器可以跨區回收,年輕代可以,老年代也可以.

所以我們在這個位置可以給定參數包括可以在里面打印GC的信息

這個很簡單,直接復制就可以用的堆大小設置JVM中最大堆大小有三方面限制:相關操作系統的數據模型(32bit 還是 64bit操作系統),它的限制方式是不一樣的,系統可以用虛擬內存限制,可以用物理內存限制,32位系統下,一般限制在1.5G~2G,堆的大小在32位系統下最大不能超過2個G或者1.5個G,64位系統則對內存無限制,但是即使是這樣它還是有一個下限的,你總不能超過總內存的大小吧,總存儲空間的大小吧.典型的設置java -Xmx3550m -Xms3550m -Xmn2g -Xss128k看到這個想到什么了,它是通過黑窗口來做的,-Xmx是堆最大可用內存,-Xms是初始堆大小,-Xmn2g設置年輕代大小整個堆大小=年輕代大小+老年代大小+持久代大小,最后合并成就是我們整個堆的大小,持久代一般不用分很大,持久代64M就足夠了,不要想著有很多東西存在持久帶里,-Xss128k是設置每個線程的堆棧大小,線程堆的大小,JDK1.5以后每個線程堆棧大小為1M,以前的每個版本為256K,比如說我們經常會遇到棧溢出,就和設置這個大小有關你設置越大,棧溢出的幾率就越小,但是有可能會有浪費,如果設置過小,棧溢出的風險就更大,所以這一塊我們建議能不動就不動,因為虛擬機默認給你的大小已經完全夠用了,除非你要做一些科學計算,我天天玩遞歸,玩數學運算,遞歸老長了,遞歸的次數老頻繁了,這個時候就應該加一個這種大小,這種方式是詳細指定 java -Xmx3550m -Xms3550m -Xss 128k -XX:NewRatio=4NewRatio是按照比例去設置,設置為4表示年輕代與老年代所占比值為1:4,年輕代占5分之一還有Survivor Ratio設置s0和s1的比例-XX:MaxPermSize 設置持久代的大小-XX:MaxTenuringThreshold=0 設置垃圾最大年齡,垃圾回收的一個閥值,如果這個對象的年齡到15次還活著, 那說明沒問題了,直接進入老年代里面,如果15次就回收了,就回收了有兩種方式給定參數,一個是命令窗口的方式,一種是Eclipse->Run->Configuration->Arugument吞吐量優先的并行收集器并行收集器主要以達到一定的吞吐量為目標,適用于科學計算和后臺處理等.以上的配置我們主要是考慮性能,接下來我們是考慮吞吐量的,其實我個人覺得考慮吞吐量不太實用我們B/S編程

ParallelGC本來就是考慮吞吐量的,所以要首選這個GC,-XX:ParallelGCThreads=20 Parallel GC就是并行的,這里就是設置垃圾回收線程數的,所以現在給了20個并行線程做垃圾回收,這塊不是給越大越好,它最大不能超過這臺服務器的邏輯內核數,設置完也沒用,比如我現在這個機器給他設置20,一點用都沒有,它最多能用上4個,因為我這個CPU是邏輯4核的,單CPU超線程的,i5,4核的, 調優總結年輕代大小選擇JVM調優策略是什么,可以把它換成Server端的,一次分配堆大小,GC,但這些也不是全部的調優,這個顆粒度比較粗了,如果你想做更細粒度的調優,這塊只能給你理論上宏觀上的1. 響應時間的應用,盡可能的設置大,年輕代盡可能設大,直接接近系統的最低響應時間的限制,根據實際情況選擇,在此種情況下,年輕代收集發生的頻率也是最小的,減少達到年老代的現象.2. 吞吐量優先的應用: 盡可能的設置大,可能達到Gbit的程度,因為對響應時間沒有要求,垃圾收集可以并行進行,一般適合8CPU以上的應用.3. 響應時間優先的應用: 年老代使用并發收集器,所以其大小需要小心設置,一般要考慮并發會話率和會話持續時間等一些參數,如果堆設置太小,可能會造成內存碎片,高回收頻率以及應用暫停而使用傳統的標記清除方式,如果堆大了,則需要較長的時間收集最優化的方案,一般需要參考以下數據獲得:1. 并發垃圾收集信息2. 持久代并發收集次數3. 傳統 GC 信息4. 花在年輕代和老年代回收上的時間比例

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的jvm常见参数介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。