昨天啓動工程,發現佔用內存特別多,佔用了1個多G,致使系統特別卡,這還只是剛啓動呢,什麼都沒作,我不能忍,卡的人心煩,並且工做 效率也低,因此看是否是能解決掉這個問題?併發
首先看看程序中是否有代碼問題致使內存吃這麼多?經過JDK自帶的VisualVM監控,發現都挺正常的,使用的堆常在250M之內,還能接受,可是分配的話,是分配了900M的空間,初步估計應該是初始化的時候撐大的,但沒有釋放回去,因此決定經過設置JVM參數的方法看是否是能優化一下;優化
在IDEA中設置JVM啓動參數線程
-Xmx600m 最大堆大小內存
-Xms600m 初始堆大小ci
-Xmn100m 年輕代大小it
-XX:SurvivorRatio=8 Eden區與Survivor區的大小比值,設置爲8,則兩個Survivor區與一個Eden區的比值爲2:8,一個Survivor區佔整個年輕代的1/10io
-XX:+UseG1GC 使用 G1 (Garbage First) 垃圾收集器 (由於本地是JDK版本是JDK8,因此啓用G1收集器,8如下的能夠試用CMS收集器)效率
-XX:ParallelGCThreads=8 設置垃圾收集器在並行階段使用的線程數[通常設置爲本機CPU線程數相等,即本機同時能夠處理的個數,設置過大也沒有用]監控
-XX:ConcGCThreads=8 併發垃圾收集器使用的線程數量gc
-XX:+DisableExplicitGC 禁止在啓動期間顯式調用System.gc()
-XX:+HeapDumpOnOutOfMemoryError OOM時導出堆到文件
-XX:HeapDumpPath=d:/dumps/xxx.dump 導出OOM的路徑(此處自定義dump文件路徑)
-XX:+PrintGCDetails 打印GC詳細信息
-XX:+PrintGCTimeStamps 打印CG發生的時間戳
-XX:+PrintHeapAtGC 每一次GC前和GC後,都打印堆信息
-XX:+TraceClassLoading 監控類的加載
設置完後再查看內存就基本上穩定在600M左右了,一下少了差很少一半,仍是很值得的。這下不再用擔憂電腦卡了。。