成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學習JVM參數前你需要了解些什么

開發 開發工具 虛擬化
大家照相通常使用手機就夠用了,但是針對發燒友來說會使用更專業的設備,比如單反相機,在單反里有好幾個模式,P/A/S/M,其中P是傻瓜模式,程序會自動根據環境設置快門速度和光圈大小,以得到相對合適的曝光效果。

[[323264]]

JVM參數是什么

大家照相通常使用手機就夠用了,但是針對發燒友來說會使用更專業的設備,比如單反相機,在單反里有好幾個模式,P/A/S/M,其中P是傻瓜模式,程序會自動根據環境設置快門速度和光圈大小,以得到相對合適的曝光效果。A檔是光圈優先,用戶可以自己設置光圈大小,快門速度等都交給相機程序來決定,類似半自動化的模式。S檔是快門優先模式,和A檔類似,只是用戶可以設置快門速度。最后一個模式是M檔,這是純手動模式,由用戶自己來調整快門速度,光圈大小等,這個對人的要求就會很高,但是很多專家往往都會選擇M檔來拍攝自己的作品。

可以把JVM想象成相機,JVM參數想象成光圈大小,快門速度之類的參數值,這些參數對程序的運行會影響挺大。

java程序跑在JVM上,JVM會根據環境自動設置一些JVM參數,但是這些參數并不能保證一定是最優的,有些參數在啟動的時候就基本設置好了,它們在運行的時候還無法調整。為了讓JVM能更好地運行你的程序,還是有必要對JVM參數有一定的理解,知道這些JVM參數分別在什么場景下有效果,起到什么作用,比如我們到底期不期望類可以卸載,是否可以在運行的時候打印一些日志協助我們了解JVM的運行情況,出問題的時候是否可以自動給我們做一些現場數據的保留等,這些都是可以通過JVM參數來設置的。

JVM參數有多少

相機調整的無非就那么幾個參數值,那JVM參數到底有多少個呢,大概有1000多個,是不是讓你很震驚,沒錯,確實有這么多。

大家可以到 PerfMa社區 去看看所有這些JVM參數(注:這是PerfMa社區專門為大家分享JVM參數經驗的討論區),當然我們不一定非得對每個JVM參數要了解清楚,但是對一些常見的,有助于性能調優的JVM參數還是有必要了解一下的。

 

JVM參數通常設置的位置

我們啟動一個java程序很簡單,命令類似如下

  1. java Main 

我們都知道上面的Main是程序的啟動類,JVM執行的時候會找到這個Main類里的如下簽名的函數

  1. Public static void main(String args[]) 

那這里函數的參數args怎么傳進來的呢?我們通過在啟動命令的主類后面加上相關的參數,參數之間用空格分開,JVM會自動將這些參數作為args的組成部分傳進來,比如

  1. java Main arg1 arg2 

這樣,args這個數組里自動會填充arg1和arg2兩個元素,這樣在你的程序里就可以使用這些參數了

我們把arg1和arg2這些叫做程序參數,但是和我們課程相關的并不是程序參數,而是JVM參數,那JVM參數放到哪里呢?JVM參數都是放在主類之前,java命令之后,比如

  1. java -Xmx100M Main arg1 arg2 

這里的-Xmx100M其實就是JVM參數,所以所有的JVM參數都是放在這個位置的,如果不是這個位置,那你設置的JVM參數將會是無效的,如果參數出現不符合預期的情況,那請第一時間檢查的是你JVM參數設置的位置,當然還可能存在一些別的原因導致JVM參數和你設置的情況可能不一致的情況

JVM參數的寫法

那JVM參數具體怎么寫呢,可以有好幾種

  • “-X” 開頭的,比如-Xmx100M
  • “-XX: ” 開頭的,比如-XX:+UseG1GC
  • “-” 開頭的,比如-verbose:gc

其中-X和-開頭的通常會被轉換為一個或者多個-XX:開頭的參數,只是一個簡化的寫法,比如說-Xmx100M,JVM里會自動轉化為-XX:MaxHeapSize=100M,-verbose:class會自動轉換為-XX:+TraceClassLoading -XX:+TraceClassUnloading

通過Flags參數指定JVM參數文件

如果JVM參數都和源碼伴著一起發布的話,如果僅僅修改JVM參數也必須拉個分支提交代碼,這不是很友好,有什么好辦法呢?

我們可以在啟動參數里設置一個參數就好,這個參數類似如下

  1. java -XX:Flags=/home/admin/flags Main arg1 arg2 

設置過這個參數之后,我們只要在服務的/home/admin目錄下創建flags文件,同時在這個文件里指定所有的JVM參數就可以了,但是對flags文件里的參數寫法會有些要求,-X之類的參數不能設置,但是可以用其等價的-XX的參數來替代,比如說-Xmx100M,只能用-XX:MaxHeapSize=100M來取代,同時在文件里不要出現-XX:,只要key=value或許+/-key就可以了,不同的參數之間用換行或者空格分開即可,比如flags文件的內容如下:

  1. MaxHeapSize=8G +UseG1GC 

其實等價于

  1. -Xmx8G -XX:+UseG1GC 

可以通過加上-XX:+PrintVMOptions可以打印設置過的JVM參數來驗證,比如

  1. java -XX:Flags=/home/admin/flags -XX:+PrintVMOptions Main arg1 arg2 

通過VMOptionsFile參數來指定JVM參數文件

使用上面的Flags參數可能會比較別扭,因為設置參數和我們正常的寫法不太一樣,如果我們的JDK版本大于1.8的話,JVM提供了一個更人性化的參數,那就是VMOptionsFile來取代Flags,這也是指定一個文件,這個文件里的JVM參的寫法和我們在java命令后寫的JVM參數寫法完全一樣

  1. java -XX:VMOptionsFile=/home/admin/flags Main arg1 arg2 

在flags文件里我們可以這么寫

  1. -Xmx8G -XX:+UseG1GC 

是不是方便了很多呢?

【本文是51CTO專欄作者李嘉鵬的原創文章,轉載請通過微信公眾號(你假笨,id:lovestblog)聯系作者本人獲取授權】

 

戳這里,看該作者更多好文

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2020-11-17 08:00:00

機器學習管道IT

2022-07-29 09:17:46

JavaScriptReactJS學習

2010-04-30 10:05:31

企業級Linux

2012-06-26 10:13:55

2011-04-01 11:16:06

hessian

2012-06-27 09:11:47

2022-06-08 08:03:51

React.jsReactJS 庫

2018-08-23 10:17:09

2011-12-14 16:43:54

javanio

2016-11-01 16:41:08

直通網線連接端口傳輸數據

2018-04-10 09:59:44

GoogleJS代碼規范

2022-01-04 19:28:05

VMware云端虛擬化

2020-10-13 06:56:19

JavaScript異常類型開發

2022-10-26 07:21:15

網絡視頻開發

2015-12-23 10:00:04

多種編程語言

2015-09-17 09:36:46

Chrome改變

2022-10-27 10:29:15

2022-08-15 06:53:22

網絡攻擊網絡安全

2021-08-06 06:51:15

TypeScript Any 類型

2019-11-11 09:24:37

戴爾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一级在线观看 | 91精品久久久久久久久久入口 | av在线黄 | 91亚洲国产成人久久精品网站 | 成人福利在线 | 黄色一级免费看 | 久久精品视频网站 | 91精品国产综合久久精品 | 亚洲视频一 | 欧美精品欧美精品系列 | 97视频在线免费 | 成人影院在线 | www.男人天堂.com | 国产激情一区二区三区 | 日本爱爱视频 | 激情av网站 | 国产一区二区三区久久久久久久久 | 国产精品久久久久久久久动漫 | 手机三级电影 | 天天看天天干 | 久久久久久免费精品一区二区三区 | 在线视频99| 大象一区 | 女女百合av大片一区二区三区九县 | 免费视频一区二区 | 伊人爽 | 国产福利91精品一区二区三区 | 国产成人精品在线 | 91久久国产综合久久 | 亚洲精品一 | 日韩精品一区二区三区中文在线 | 国产精品久久免费观看 | 日本精品一区二区三区四区 | 伊人精品视频 | 日韩二三区 | 亚洲免费人成在线视频观看 | 波多野结衣电影一区 | 国产一区不卡 | 日韩区 | 91精品国产综合久久久动漫日韩 | 亚洲一区视频在线 |