算法
标记清除
原理
从 GC Roots开始扫描,对“可回收”、“不可回收”进行标记
优点
- 算法相对简单
- 存活对象比较多的情况下效率比较高
缺点
- 两遍扫描(第一遍找出有用的;第二遍找出没用的进行清理;),效率较低
- 容易产生碎片
- Eden Space(伊甸园)不适用
Copy算法
原理
将内存分为两部分,将有用的复制到统一区域优点
- 只扫描一次,效率高
- 清理内存碎片
缺点
- 空间浪费
- 移动复制对象,需要重新调整引用
适用场景
- 适用于存活对象较少的情况
Mark-Compact(标记压缩)
优点
- 不会产生碎片,方便对象分配
- 不会产生内存减半
缺点
- 需要扫描两遍
- 需要移动对象,效率偏低
实操
获取配置
- 获取JVM默认参数
java -XX:+PrintCommandLineFlags -version
java 11 默认参数java 8 默认参数1
2
3
4
5
6
7
8
9
10-XX:G1ConcRefinementThreads=8
-XX:GCDrainStackTargetSize=64
-XX:InitialHeapSize=134217728
-XX:MaxHeapSize=2147483648
-XX:+PrintCommandLineFlags
-XX:ReservedCodeCacheSize=251658240
-XX:+SegmentedCodeCache
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:+UseG1GC1
2
3
4
5
6-XX:InitialHeapSize=259107072
-XX:MaxHeapSize=4145713152
-XX:+PrintCommandLineFlags
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:+UseParallelGC