永久存儲區相關參數:
-XX:PermSize 應用服務器啓動時,永久存儲區的初始化內存大小;默認64M。
-XX:MaxPermSize 應用運行中,永久存儲區域的最大值。爲了不消耗擴大JVM永久存儲區分配的開銷,將此參數和-XX:PermSize這兩個值設爲相等。
堆空間相關參數:
-Xms 啓動應用時,JVM堆空間的初始值大小;默認值爲物理內存的1/64,但小於1G。
-Xmx 應用運行中,JVM堆空間的最大值。爲了不消耗擴大JVM堆空間分配的開銷,將此參數設置爲和-Xms相等,考慮到需要開線程,將此值設置爲總內存的80%。默認值是物理內存的1/4,但小於1G。
-Xmn 此參數硬性規定堆空間的新生代空間大小,推薦將此值設置爲堆空間大小的1/4。
上面所列出的JVM參數關係到系統的性能,而其中-XX:PermSize,-XX:MaxPermSize,-Xms,-Xmx,-Xmn這5個參數直接影響到系統的性能,系統是否會內存溢出。
如果程序出現:java.lang.OutOfMemoryError:Java Permanent Space,此乃永久存儲區設置太小,不能滿足系統的需求,此時只需要調整-XX:PermSize和-XX:MaxPermSize大小即可。
如果程序出現:java.lang.OutOfMemoryError:Java heap Space,此乃堆空間不足,只需要調整-Xms和-Xmn大小即可
給大家提供一個內存監控工具:
下載完成,配置環境變量:
配置本地的環境變量加入JVMSTAT_JAVA_HOME,配置爲jdk安裝的路徑
配完後,win+R,打開dos命令窗口,輸入jps,查看所有java應用程序列表,第一列爲pid,第二列爲應用名字。
然後:
就會出現當前應用的內存分佈情況(實時動態刷新):
然後,跑應用,如果哪裏報內存溢出了,自己分析。