最近研究Java的垃圾收集.但看網上的文章.不少說的是java6的事情.如果下工夫不深,很容易被坑.所以,想本身寫一篇垃圾收集的教程.java
可是慚愧慚愧.最近時間並很少.所以只有時間,寫一個知識點索引,但願讀到的人,根據這個知識點,查找相關的內容.不要被網上亂七八糟的網文誤導.等我有時間,也會填充這些內容.把這個索引,變成真正的文章.ui
垃圾收集的概念以及必要性.spa
查找垃圾的策略:引用計數,可達性分析3d
清理垃圾的策略:複製,標記-清除,標記-整理blog
Java的內存分代以及管理策略:教程
新生代(伊甸園,生存者0,生存者1),老年代索引
能夠關注他們的size分配比例(默認值,以及經過什麼參數配置),以及什麼時候進入下一代.內存
新生代回收器:Serial、ParNew、Parallel Scavengeget
老年代回收器:Serial Old、Parallel Old、CMSit
重點關注各類垃圾收集器的使用場景,優缺點.
各類垃圾回收器的搭配狀況:
整堆回收器:G1
G1收集器,再也不將整塊內存分爲新生代和老年代.而是分爲不一樣的Region,每一個Region都有多是伊甸園,生存者區,老年代.
ZGC(關於原理資料較少)
Shenandoah(關於原理資料較少)
查看當前JVM用的是什麼垃圾回收器:
java -XX:+PrintCommandLineFlags -version
java8:
-XX:InitialHeapSize=267400832 -XX:MaxHeapSize=4278413312 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
openjdk version "1.8.0_201-2-redhat"
OpenJDK Runtime Environment (build 1.8.0_201-2-redhat-b09)
OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode)
java11:
-XX:G1ConcRefinementThreads=10 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=267400832 -XX:MaxHeapSize=4278413312 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation openjdk version "11" 2018-09-25 OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)