一、垃圾收集算法
1. 分代收集理论
- 核心思想:根据对象存活周期不同,将 Java 堆分为新生代和老年代,适配不同垃圾收集算法
- 分代依据:
- 新生代:对象存活时间短,每次 GC 大量对象(近 99%)回收,适合复制算法
- 老年代:对象存活概率高,无额外空间担保,适合标记 - 清除 / 标记 - 整理算法
- 性能差异:标记 - 清除 / 标记 - 整理算法比复制算法慢 10 倍以上
JVM 垃圾收集理论及三大基础算法(标记 - 复制、标记 - 清除、标记 - 整理),详细对比了新生代与老年代收集器特性,重点解析了 ParNew 与 CMS 收集器的配合机制。同时深入阐述了底层核心机制,包括三色标记算法原理、读写屏障实现以及记忆集与卡表优化方案,并结合亿级流量场景给出了 ParNew+CMS 的参数优化实战建议。
| 算法 | 优点 | 缺点 | 适用代际 |
|---|---|---|---|
| 标记 - 复制 | 效率高、无碎片 | 内存利用率低 | 新生代 |
| 标记 - 清除 | 实现简单、无需移动 | 效率低、产生碎片 | 老年代 |
| 标记 - 整理 | 无碎片、利用率高 | 效率低、有移动开销 | 老年代 |
| 收集器 | 线程模型 | 算法 | 核心特点 | 参数配置 |
|---|---|---|---|---|
| Serial | 单线程 | 标记 - 复制 | 简单高效、STW 时间长 | -XX:+UseSerialGC |
| ParNew | 多线程 | 标记 - 复制 | 可与 CMS 配合、多线程并发 | -XX:+UseParNewGC |
| Parallel Scavenge | 多线程 | 标记 - 复制 | 注重吞吐量、自适应调节 | -XX:+UseParallelGC |
| 收集器 | 线程模型 | 算法 | 核心特点 | 参数配置 |
|---|---|---|---|---|
| Serial Old | 单线程 | 标记 - 整理 | 单线程、作为 CMS 后备 | -XX:+UseSerialOldGC |
| Parallel Old | 多线程 | 标记 - 整理 | 注重吞吐量、Parallel 配套 | -XX:+UseParallelOldGC |
| CMS | 并发 | 标记 - 清除 | 低停顿、并发收集 | -XX:+UseConcMarkSweepGC |
-XX:ParallelGCThreads 调整)
-XX:ConcGCThreads:并发 GC 线程数-XX:+UseCMSCompactAtFullCollection:FullGC 后整理碎片-XX:CMSInitiatingOccupancyFraction:老年代使用率阈值(默认 92%)-XX:+CMSScavengeBeforeRemark:Remark 前触发 Minor GC核心问题:并发标记时,用户线程修改对象引用导致 "多标" 或 "漏标"

post_write_barrier记录新引用对象pre_write_barrier记录旧引用对象// 写屏障示例
void oop_field_store(oop* field, oop new_value) {
pre_write_barrier(field); // SATB 记录旧值
*field = new_value;
post_write_barrier(field, new_value); // 增量更新记录新值
}
// 读屏障示例
oop oop_field_load(oop* field) {
pre_load_barrier(field); // 记录读取对象
return *field;
}
CARD_TABLE[],每个元素对应 512 字节(2^9)的 "卡页"
-Xms3072M -Xmx3072M # 堆内存固定 3G(避免动态扩容)
-Xmn2048M # 新生代 2G(占堆 66.7%,减少 Minor GC 频率)
-Xss1M # 线程栈大小
-XX:MetaspaceSize=256M
-XX:MaxMetaspaceSize=256M # 元空间固定
-XX:SurvivorRatio=8 # Eden:S0:S1=8:1:1
-XX:MaxTenuringThreshold=5 # 对象 5 次 Minor GC 后进入老年代
-XX:PretenureSizeThreshold=1M # 1M 以上大对象直接进入老年代
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC # 启用 ParNew+CMS
-XX:CMSInitiatingOccupancyFraction=92 # 老年代使用率 92% 触发 Full GC
-XX:+UseCMSCompactAtFullCollection # Full GC 后整理碎片
-XX:CMSFullGCsBeforeCompaction=3 # 3 次 Full GC 后整理一次
CMS 参数优化:平衡 Full GC 频率与碎片整理开销


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online