---
# System prepended metadata

title: JVM 的 gc 作用與設定
tags: [學習筆記, JAVA, JVM]

---

# JVM 的 gc 作用與設定

* gc是什麼？為何gc？

    > gc指的是回收 memory的一種機制，目的是能有效率的重複使用，主要作用於 method area 與 heap area，當作用域的 object 沒有再被參考時，它將在下一次的gc時就會被銷毀。
    > 
    > gc分2種，分為full gc與普通gc；普通gc針對新生區，full gc針對年老區及新生區。gc也可以想像成戰場，經過撕殺能存活下來的才會保留在記憶體，新生區經過15次以上的gc仍存活下來，移到老年區，移到老年區的object 只有jvm執行full gc時再會再次上場戰鬥。

* 何時gc？
    > 1. background process 定期執行
    > 2. 當 heap 達到70、80% 容量時自動執行


* heap memory 爆了會出現什麼 exception？為何有時爆掉不會報exception？

    > 1. java.lang.OutOfMemoryError: Java heap space
    > 2. 當記憶體不夠且又需要執行 new object 時，JVM就掛了，此時連 exception 都沒辦法報，此時可以改用 throwable，就能接獲 exception。


* 說說heap memory系統的預設，怎麼指定大小？

    > JVM的預設大小最小是ram 的1/64，最大是ram的 1/4。
    可以透過手動鍵入參數:
    -Xms64m or -Xms64M  (最小值)
    -Xmx1g or -Xmx1G (最大值)

###### tags: `學習筆記` `JAVA` `JVM`