【推荐】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)
来源:oschina
链接:https://my.oschina.net/u/212203/blog/3102993