G1 JVM
G1
-
Region
* RSet Rememberd Sets, 记录外部指向本Region 的所有引用.
* Card
![图片名称]()
-
SATB Snapshot At The Begining
* 记录活对象
* 三色标记法 -
pre-write barrier
* satb_mark_queue -
如何知道哪些对象是GC开始之后新分配的呢.
* top-at-mark-start TAMS
* preTAMS 和 nextTAMS 两个对象,不是很懂.
* 不是很懂 -
G1 concurrent marking, bitmap, prevBitmap, nextBitmap
![图片名称]()
* 隐式存活, 是什么意思?????
GC
-
Young GC
![图片名称]()
-
Mixed GC
* -XX:MaxGCPauseMillis GC收集停顿时间
* Pause Prediction Model 停顿预测模型
* XX:InitiatingHeapOccupancyPercent 45%, Old 占用比例
* 部分 Old 区的收集
![图片名称]()
* 好像页面访问下,这个链接就可以用了. -
Full GC
* Serial GC
* 当Mixed GC 的速度赶不上应用程序申请内存的速度的时候.
收集器
-
SafePoint
-
ParNew
* Serial 的多线程版本.
* -XX:+SerialGC
* -XX:+UseParNewGC
![图片名称]()
-
Parallel Scavenge 收集器,
* -XX:+UseParallelGC
* -XX:+UseParallelOldGC
* 目标: 吞吐量优先
* -XX:MaxGCPauseMillis
* -XX:GCTimeRatio -
CMS 并发标记清除收集器
* -XX:+UseConcMarkSweepGC
* Concurrent Mark / PreClean
* PreClean 是干嘛的呢, 不是很懂.
* -XX:+CMSFullGCsBeForeCompaction
![图片名称]()
-
Garbage First
* -XX:+UseG1GC
![图片名称]()
清理算法
- 复制算法
- 标记-整理算法
JVM 类加载过程
- 深入理解JVM的类加载
- 如果有一个同名字段同时出现在该类的接口和父类中,或同时在自己或父类的接口中出现,编译器可能会拒绝编译。
* 为什么???? - Bootstrap Class Loader
* JRE目录下的, rt.jar, resources.jar, charsets.jar 等jar包和class - Extension Class Loader
* JRE\lib\ext
* sun.misc.Launcher$ExtClassLoader - System Class Loader
* 也可以成为应用类加载器 ??????
* sun.misc.Launcher$AppClassLoader
Region 分代
- -XX:G1HeapRegionSize=n 默认2048 个分区.
- -XX:GCTimeRatio 即为应用与GC的耗费时间
* -XX:G1NewSizePercent 5%默认
* -XX:G1MaxNewSizePercent 60%
* -XX:MaxGCPauseMillis ,需要扩容的大小以及 分区的已记忆集合RSet.
本地分配缓冲 Local allocation buffer Lab
- TLAB Thread Local allocation buffer
- PLAB Promotion Thread Local allocation buffer







浙公网安备 33010602011771号