bat java 指定堆大小_jvm 堆内存 栈内存 大小设置 查看堆大小
1.在eclipse設(shè)置JVM參數(shù)
打開(kāi)eclipse-窗口-首選項(xiàng)-Java-已安裝的JRE(對(duì)在當(dāng)前開(kāi)發(fā)環(huán)境中運(yùn)行的java程序皆生效,也就是在eclipse中運(yùn)行的java程序)編輯當(dāng)前使用的JRE,在缺省VM參數(shù)中輸入:
-Xmx1024m -Xms1024m -Xmn256m -Xss16m
或者在運(yùn)行一個(gè)java程序的時(shí)候執(zhí)行:
java?-Xmx1024m
-Xms1024m -Xmn256m -Xss16m? Test
Test是一個(gè)class文件。
2. 在Tomcat服務(wù)器上設(shè)置JVM參數(shù)
set CATALINA_OPTS=-Xmx512m -Xms512m -Xmn64m -Xss2m??或者
set JAVA_OPTS=-Xmx512m -Xms512m -Xmn64m -Xss2m
設(shè)置CATALINA_OPTS 和??JAVA_OPTS都是一個(gè)道理,在啟動(dòng)tomcat的時(shí)候設(shè)置參數(shù)。
兩者區(qū)別是JAVA_OPTS在tomcat停止的時(shí)候也會(huì)執(zhí)行這個(gè)命令。
注意:Tomcat分為安裝版(*.exe)和非安裝版或者解壓版(*.zip),個(gè)人還是比較喜歡解壓版。兩者雖然在功能上沒(méi)有什么區(qū)別,但是在設(shè)置上還是有要注意的地方。這里只談JVM設(shè)置要注意的地方。
安裝版:windows的服務(wù)會(huì)有一個(gè)tomcat服務(wù),當(dāng)啟動(dòng)服務(wù)的時(shí)候Tomcat會(huì)從注冊(cè)表讀取JVM的參數(shù)。也就是說(shuō)當(dāng)在tomcat的lib文件夾下catalina.bat或者startup.bat中設(shè)置JVM參數(shù)是無(wú)效的。解決辦法:設(shè)置tomcat的注冊(cè)表;或者使用startup.bat啟動(dòng)tomcat。
解壓版:當(dāng)點(diǎn)擊startup.bat時(shí),它會(huì)讀取catalina.bat中的配置,不管在startup.bat文件還是在catalina.bat文件中設(shè)置JVM參數(shù),都會(huì)讀取JVM參數(shù)。
3. ?查看堆的大小
在程序中查看,返回值單位是字節(jié),當(dāng)然還有其他JVM參數(shù)可以查看。
Runtime.getRuntime().maxMemory();
或者在命令行 執(zhí)行jvisualvm 命令
或者%java_home%\bin 目錄下點(diǎn)擊jvisualvm.exe
或者在命令行執(zhí)行jconsole 命令
或者%java_home%\bin 目錄下點(diǎn)擊jconsole.exe
4. java內(nèi)存可以分為堆內(nèi)存和非堆內(nèi)存
堆和非堆:堆是給開(kāi)發(fā)人員用的,是在JVM啟動(dòng)時(shí)創(chuàng)建; 非堆是留給JVM自己用的,用來(lái)存放類型(類和接口)的信息。它和堆不同,運(yùn)行期內(nèi)GC不會(huì)釋放空間。如果web app用了大量的第三方j(luò)ar或者應(yīng)用有太多的class文件而恰好MaxPermSize設(shè)置較小,超出了也會(huì)導(dǎo)致這塊內(nèi)存的占用過(guò)多造成溢出,或者 tomcat熱部署時(shí)侯不會(huì)清理前面加載的環(huán)境,只會(huì)將context更改為新部署的,非堆存的內(nèi)容就會(huì)越來(lái)越多,熱部署上幾次就java.lang.OutOfMemoryError:
PermGen space .
---- 堆內(nèi)存設(shè)置:程序可以到達(dá)的,可以操作的
-Xms 初始堆內(nèi)存 默認(rèn)物理內(nèi)存1/64,也是最小分配堆內(nèi)存。當(dāng)空余堆內(nèi)存小于40%時(shí),會(huì)增加到-Xms的最大限制
-Xmx 最大堆內(nèi)存分配 默認(rèn)物理內(nèi)存1/4,當(dāng)空余堆內(nèi)存大于70%時(shí),會(huì)減小到-Xms的最小限制。
一般設(shè)置 -Xms和Xms大小相等
---- 非堆內(nèi)存設(shè)置
-XX:PermSize 非堆內(nèi)存的初始值,默認(rèn)物理內(nèi)存的1/64 ,也是最小非堆內(nèi)存。
-XX:MaxPermSize 非堆內(nèi)存最大值,默認(rèn)物理內(nèi)存的1/4,
5. 典型JVM參數(shù)設(shè)置:
java -Xmx128m -Xms128m -Xmn64m -Xss1m
-Xmx128m:設(shè)置JVM最大可用內(nèi)存為128M。
-Xms128m:設(shè)置JVM最小內(nèi)存為128m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。
-Xmn2g:設(shè)置年輕代大小為2G。整個(gè)堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會(huì)減小年老代大小。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8。
-Xss128k:設(shè)置每個(gè)線程的堆棧大小。 JDK5.0以后每個(gè)線程堆棧大小為1M,以前每個(gè)線程堆棧大小為256K。根據(jù)應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整。在相同物理內(nèi)存下,減小這個(gè)值能生成更 多的線程。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無(wú)限生成,經(jīng)驗(yàn)值在3000~5000左右。
-- Ratio 英音:['reiseu] 比率
-- Eden 伊甸
-- Survivor 幸存者
java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
-XX:NewRatio=4:設(shè)置年輕代(包括Eden和兩個(gè)Survivor區(qū))與年老代的比值(除去持久代)。設(shè)置為4,則年輕代與年老代所占比值為1:4,年輕代占整個(gè)堆棧的1/5
-XX:SurvivorRatio=4:設(shè)置年輕代中Eden區(qū)與Survivor區(qū)的大小比值。設(shè)置為4,則兩個(gè)Survivor區(qū)與一個(gè)Eden區(qū)的比值為2:4,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/6
-XX:MaxPermSize=16m:設(shè)置持久代大小為16m。
-XX:MaxTenuringThreshold=0:設(shè)置垃圾最大年齡。如果設(shè)置為0的話,則年輕代對(duì)象不經(jīng)過(guò)Survivor區(qū),直接進(jìn)入年老代。
對(duì)于年老代比較多的應(yīng)用,可以提高效率。如果將此值設(shè)置為一個(gè)較大值,則年輕代對(duì)象會(huì)在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概論。
總結(jié)
以上是生活随笔為你收集整理的bat java 指定堆大小_jvm 堆内存 栈内存 大小设置 查看堆大小的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 福州联通与市政府携手 共筑新型智慧城市
- 下一篇: hadoop-09-安装资源上传