java啟動(dòng)如何設(shè)置JAR包內(nèi)存大小
java啟動(dòng)設(shè)置JAR包內(nèi)存大小
親測(cè)可用!
java -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M -jar a.jar
-Xms256m -Xmx512m: 對(duì)象使用的內(nèi)存,也稱堆內(nèi)存
PermSize 類使用的內(nèi)存,也稱永久內(nèi)存
由于Spring-boot內(nèi)置tomcat,默認(rèn)內(nèi)存占用可能很大,最好設(shè)置下jar啟動(dòng)占用的內(nèi)存。
給自己的jar包運(yùn)行時(shí)分配內(nèi)存大小
java -jar -Xms8m -Xmx8m -XX:PermSize=8M -XX:MaxPermSize=16M ?bankmock-0.0.1-SNAPSHOT.jar
說(shuō)明:
Xms
:堆內(nèi)存初始大小Xmx
:堆內(nèi)存最大值PermSize
:永久內(nèi)存初始大小MaxPermSize
:永久內(nèi)存最大值
上邊是啟動(dòng)jar包時(shí)設(shè)置的jvm參數(shù);
自己打一個(gè)包,springboot搭建的,打包后40多兆。
當(dāng)我們?cè)趙indows上cmd進(jìn)入啟動(dòng)的時(shí)候,當(dāng)我設(shè)置的啟動(dòng)參數(shù)為:
java -jar -Xms8m -Xmx8m -XX:PermSize=8M -XX:MaxPermSize=16M ?bankmock-0.0.1-SNAPSHOT.jar
會(huì)發(fā)現(xiàn)內(nèi)存溢出了,說(shuō)明我們分配的內(nèi)存不夠,最后我 進(jìn)行多次實(shí)驗(yàn)后,找到了最小值:
java -jar -Xms8m -Xmx16m -XX:PermSize=8M -XX:MaxPermSize=16M ?bankmock-0.0.1-SNAPSHOT.jar?
我們發(fā)現(xiàn)服務(wù)正常啟動(dòng)了。
JVM的一些參數(shù)設(shè)置
#常用的設(shè)置 -Xms:初始堆大小,JVM 啟動(dòng)的時(shí)候,給定堆空間大小。 -Xmx:最大堆大小,JVM 運(yùn)行過(guò)程中,如果初始堆空間不足的時(shí)候,最大可以擴(kuò)展到多少。 -Xmn:設(shè)置堆中年輕代大小。整個(gè)堆大小=年輕代大小+年老代大小+持久代大小。 -XX:NewSize=n 設(shè)置年輕代初始化大小大小 -XX:MaxNewSize=n 設(shè)置年輕代最大值 -XX:NewRatio=n 設(shè)置年輕代和年老代的比值。如: -XX:NewRatio=3,表示年輕代與年老代比值為 1:3,年輕代占整個(gè)年輕代+年老代和的 1/4 -XX:SurvivorRatio=n 年輕代中 Eden 區(qū)與兩個(gè) Survivor 區(qū)的比值。注意 Survivor 區(qū)有兩個(gè)。8表示兩個(gè)Survivor :eden=2:8 ,即一個(gè)Survivor占年輕代的1/10,默認(rèn)就為8 -Xss:設(shè)置每個(gè)線程的堆棧大小。JDK5后每個(gè)線程 Java 棧大小為 1M,以前每個(gè)線程堆棧大小為 256K。 -XX:ThreadStackSize=n 線程堆棧大小 -XX:PermSize=n 設(shè)置持久代初始值 -XX:MaxPermSize=n 設(shè)置持久代大小 -XX:MaxTenuringThreshold=n 設(shè)置年輕帶垃圾對(duì)象最大年齡。如果設(shè)置為 0 的話,則年輕代對(duì)象不經(jīng)過(guò) Survivor 區(qū),直接進(jìn)入年老代。 #下面是一些不常用的 -XX:LargePageSizeInBytes=n 設(shè)置堆內(nèi)存的內(nèi)存頁(yè)大小 -XX:+UseFastAccessorMethods 優(yōu)化原始類型的getter方法性能 -XX:+DisableExplicitGC 禁止在運(yùn)行期顯式地調(diào)用System.gc(),默認(rèn)啟用 -XX:+AggressiveOpts 是否啟用JVM開(kāi)發(fā)團(tuán)隊(duì)最新的調(diào)優(yōu)成果。例如編譯優(yōu)化,偏向鎖,并行年老代收集等,jdk6紙之后默認(rèn)啟動(dòng) -XX:+UseBiasedLocking 是否啟用偏向鎖,JDK6默認(rèn)啟用 -Xnoclassgc 是否禁用垃圾回收 -XX:+UseThreadPriorities 使用本地線程的優(yōu)先級(jí),默認(rèn)啟用 等等等......
小結(jié)一下:
我們?cè)谧约洪_(kāi)發(fā)項(xiàng)目的時(shí)候,需要部署到服務(wù)器上,那么運(yùn)維人員會(huì)問(wèn)你,你的項(xiàng)目需要多大內(nèi)存才能啟動(dòng)起來(lái)呀,有的人就說(shuō)管他的,越大越好,隨便開(kāi)口就說(shuō)1024M,2048M等等,其實(shí)我們自己在本地測(cè)試一下就知道了呀
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot啟動(dòng)后的初始化數(shù)據(jù)加載原理解析與實(shí)戰(zhàn)
本文主要圍繞?Spring?Boot?啟動(dòng)后的初始化數(shù)據(jù)加載展開(kāi),介紹了初始化任務(wù)的基本需求,包括全局配置加載、數(shù)據(jù)庫(kù)表初始化等,闡述了多種初始化加載方式,分析了它們的優(yōu)缺點(diǎn),需要的朋友可以參考下2024-11-11Java源碼解析HashMap的tableSizeFor函數(shù)
今天小編就為大家分享一篇關(guān)于Java源碼解析HashMap的tableSizeFor函數(shù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01從零開(kāi)始講解Java微信公眾號(hào)消息推送實(shí)現(xiàn)
微信公眾號(hào)分為訂閱號(hào)和服務(wù)號(hào),無(wú)論有沒(méi)有認(rèn)證,訂閱號(hào)每天都能推送一條消息,也就是每天只能推送一次消息給粉絲,這篇文章主要給大家介紹了關(guān)于Java微信公眾號(hào)消息推送實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-09-09Spring BeanFactory和FactoryBean區(qū)別解析
這篇文章主要介紹了Spring BeanFactory和FactoryBean區(qū)別解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java按時(shí)間梯度實(shí)現(xiàn)異步回調(diào)接口的方法
這篇文章主要介紹了Java按時(shí)間梯度實(shí)現(xiàn)異步回調(diào)接口,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08