linuxgc
⑴ java 的七種垃圾收集器 | Linux 中國
Java 的內存管理中,垃圾收集器(GC)起著至關重要的作用,它自動回收不再使用的對象,避免內存泄露和應用程序崩潰。
在 Java 虛擬機(JVM)中,有七種不同的垃圾收集器可供選擇,每種都有其特定的目的和優勢。
1、Serial 收集器:這是垃圾收集器的原始實現,使用單線程進行垃圾回收。適用於可以承受短暫停頓的應用程序。在運行時,可以通過以下命令啟用該垃圾收集器:
2、Parallel 收集器:與 Serial 收集器類似,Parallel 收集器也使用「stop the world」方法,但在垃圾收集時會有多個線程參與。適用於多線程和多處理器環境下的應用程序。使用該垃圾收集器時,可以通過各種 JVM 參數進行調優。可以使用以下命令顯式啟用 Parallel 收集器:
3、Concurrent Mark Sweep(CMS)收集器:CMS 垃圾收集器與應用程序並行運行,適用於停頓時間較短的應用程序。在 Java8 中已過時,並在 Java14 中被移除。可以使用以下命令啟用 CMS 收集器:
4、G1 收集器:G1 垃圾收集器旨在替代 GMS,具有並行、並發和增量壓縮功能。它將堆內存劃分為大小相同的區域,通過多個線程觸發全局標記階段。可以使用以下命令啟用 G1 收集器:
5、Epsilon 收集器:在 Java11 中引入的 no-op 收集器,不做任何實際的內存回收,只負責管理內存分配。可以使用以下命令啟用 Epsilon 收集器:
6、Shenandoah 收集器:在 JDK12 中引入的 CPU 密集型垃圾收集器,進行內存壓縮,立即刪除無用對象並釋放操作系統的空間。可以使用以下命令啟用 Shenandoah 收集器:
7、ZGC 收集器:為低延遲需要和大量堆空間使用而設計,允許在垃圾回收器運行時 Java 應用程序繼續運行。可以使用以下命令啟用 ZGC 收集器:
Java 提供了靈活的內存管理方式,熟悉不同的可用方法有助於為正在開發或運行的應用程序選擇最合適的內存管理方式。
⑵ Linux裡面JVM內存怎麼設置
jar包啟動時指定對應參數,比如我的工程啟動命令就是這樣的
啟動命令,打碼部分為工程名
常見參數如下
1.-Xms:初始堆大小。只要啟動,就佔用的堆大小。
2.-Xmx:最大堆大小。java.lang.OutOfMemoryError:Java heap這個錯誤可以通過配置-Xms和-Xmx參數來設置。
3.-Xss:棧大小分配。棧是每個線程私有的區域,通常只有幾百K大小,決定了函數調用的深度,而局部變數、參數都分配到棧上。
當出現大量局部變數,遞歸時,會發生棧空間OOM(java.lang.StackOverflowError)之類的錯誤。
4.XX:NewSize:設置新生代大小的絕對值。
5.-XX:NewRatio:設置年輕代和年老代的比值。比如設置為3,則新生代:老年代=1:3,新生代占總heap的1/4。
6.-XX:MaxPermSize:設置持久代大小。
java.lang.OutOfMemoryError:PermGenspace這個OOM錯誤需要合理調大PermSize和MaxPermSize大小。
7.-XX:SurvivorRatio:年輕代中Eden區與兩個Survivor區的比值。注意,Survivor區有form和to兩個。比如設置為8時,那麼eden:form:to=8:1:1。
8.-XX:HeapDumpOnOutOfMemoryError:發生OOM時轉儲堆到文件,這是一個非常好的診斷方法。
9.-XX:HeapDumpPath:導出堆的轉儲文件路徑。
10.-XX:OnOutOfMemoryError:OOM時,執行一個腳本,比如發送郵件報警,重啟程序。後面跟著一個腳本的路徑。