我的電腦配置12G內存,64位,win10系統。
首先,idea,是在idea中安裝目錄下的bin目錄下面找到idea64.exe.vmoptions ,要是有32位的同學注意找到idea32.exe.vmoptions的文件去編輯。
更改文件,無非大多數情況下就是堆和棧的溢出或者編碼格式問題。如果出現堆溢出(java.lang.OutOfMemoryError: Java heap space),可更改堆區的Xms還有Xmx的大小或者非堆區(持久化內存)的-XX:PermSize,-XX:MaxPermSize的大小,具體大小得看你電腦得配置,還有你項目編譯需要的內存。
要是出現java.lang.StackOverflowError,這種棧溢出得話,就添加一下-Xss128k ,修改一下棧的大小,這里的128看情況更改,也可以自己嘗試其它參數。一般小的應用, 如果棧不是很深, 應該是128k夠用的 大的應用建議使用256k。一般出現棧溢出的錯誤,一般都是遞歸的錯誤,才出現Stack滿的情況,而無限循環一般不會占用更多的內存或者具體的Stack,只是占cpu而已。
-Xms1024m //設置堆最小值為1G,表示java虛擬機堆區內存初始內存分配的大小
-Xmx2048m //設置堆最大值為2G,表示java虛擬機堆區內存可被分配的最大上限
-XX:ReservedCodeCacheSize=512m //設置緩存大小
-XX:+UseConcMarkSweepGC //並發標記清除(CMS)收集器
-XX:SoftRefLRUPolicyMSPerMB=50 //每兆堆空閑空間中SoftReference的存活時間
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true //設置網絡編程獲取IPv4 的地址
-XX:+HeapDumpOnOutOfMemoryError //當堆內存空間溢出時輸出堆的內存快照。
-XX:-OmitStackTraceInFastThrow //強制要求JVM始終拋出含堆棧的異常
-Dfile.encoding=UTF-8 //設置編碼格式
eclipse (eclipse更改vm參數在ecplise安裝目錄下找到eclipse.ini文件),更改參數。
-startup
plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.epp.package.common
--launcher.defaultAction
openFile
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs //這里開始VM參數
-Dosgi.requiredJavaVersion=1.8 //指定JDK1.8版本,有時候項目版本問題也可以更改這個參數
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-XX:+UseG1GC // 指定G1垃圾回收器,G1垃圾回收器適用於堆內存很大的情況,他將堆內存分割成不同的區域,並且並發的對其進行垃圾回收。
//G1也可以在回收內存之后對剩余的堆內存空間進行壓縮。並發掃描標記垃圾回收器在STW情況下壓縮內存。G1垃圾回收會優先選擇第一塊垃圾最多的區域
-XX:+UseStringDeduplication //刪除重復的字符串,只保留一個char[]來優化堆內存
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=1.8 //指定JDK1.8版本,有時候項目版本問題也可以更改這個參數
-Dosgi.dataAreaRequiresExplicitInit=true
-Xms512m //分配最小堆512m
-Xmx2048m //分配最大堆2048m內存
--add-modules=ALL-SYSTEM
JVM按照其存儲數據的內容將所需內存分配為堆區與非堆區兩個部分:
- 堆區即為通過new的方式創建的對象(類實例)所占用的內存空間 (參數-Xms -Xmx)
- 非堆區即為代碼、常量、外部訪問(如文件訪問流所占資源)等 (參數-XX:PermSize,-XX:MaxPermSize)