Java垃圾收集的相关知识点索引

喜欢而已 提交于 2019-12-20 18:47:20

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

前言

最近研究Java的垃圾收集.但看网上的文章.很多说的是java6的事情.若是下工夫不深,很容易被坑.因此,想自己写一篇垃圾收集的教程.

但是惭愧惭愧.最近时间并不多.因此只有时间,写一个知识点索引,希望读到的人,根据这个知识点,查找相关的内容.不要被网上乱七八糟的网文误导.等我有时间,也会填充这些内容.把这个索引,变成真正的文章.

基本概念

垃圾收集的概念以及必要性.

查找垃圾的策略:引用计数,可达性分析

清理垃圾的策略:复制,标记-清除,标记-整理

垃圾回收器

Java的内存分代以及管理策略:

新生代(伊甸园,生存者0,生存者1),老年代

可以关注他们的size分配比例(默认值,以及通过什么参数配置),以及何时进入下一代.

Java7之前:

  • 新生代回收器:Serial、ParNew、Parallel Scavenge

  • 老年代回收器:Serial Old、Parallel Old、CMS

重点关注各种垃圾收集器的使用场景,优缺点.

各种垃圾回收器的搭配情况:

Java7之后:

Java7

整堆回收器:G1

G1收集器,不再将整块内存分为新生代和老年代.而是分为不同的Region,每个Region都有可能是伊甸园,生存者区,老年代.

Java11:

ZGC(关于原理资料较少)

Java12:

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)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!