[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"primary-menu":6,"cat-jvm":85,"catposts-jvm":99,"post-detail-post-jvm-cms-vs-g1-a6ba005b":208},{"config":4,"socialLinks":5},null,[],{"metadata":7,"spec":10,"menuItems":20},{"name":8,"creationTimestamp":9},"primary","2026-09-12T06:13:55.024154Z",{"displayName":11,"menuItems":12},"主菜单",[13,14,15,16,17,18,19],"88c3f10b-321c-4092-86a8-70db00251b74","menu-item-izrtmxer","c4c814d1-0c2c-456b-8c96-4864965fee94","menu-item-column","menu-item-tools","menu-item-zsxq","menu-item-ocrxlczu",[21,30,40,49,58,67,76],{"displayName":22,"metadata":23,"spec":25,"status":28,"children":29},"首页",{"name":13,"creationTimestamp":24},"2026-09-12T06:13:54.422830Z",{"displayName":22,"href":26,"priority":27,"menuName":8},"\u002F",0,{"displayName":22,"href":26},[],{"displayName":31,"metadata":32,"spec":34,"status":38,"children":39},"Java面试八股",{"name":14,"creationTimestamp":33},"2026-09-13T09:42:02.854891Z",{"displayName":31,"href":35,"target":36,"priority":37,"menuName":8},"\u002Fjava-interview","_self",1,{"displayName":31,"href":35},[],{"displayName":41,"metadata":42,"spec":44,"status":47,"children":48},"文章",{"name":15,"creationTimestamp":43},"2026-09-12T06:13:54.457307Z",{"displayName":41,"href":45,"priority":46,"menuName":8},"\u002Farchives",2,{"displayName":41,"href":45},[],{"displayName":50,"metadata":51,"spec":53,"status":56,"children":57},"项目实战",{"name":16,"creationTimestamp":52},"2026-09-14T00:35:08.138170Z",{"displayName":50,"href":54,"target":36,"priority":55,"menuName":8},"\u002Fcolumn",3,{"displayName":50,"href":54},[],{"displayName":59,"metadata":60,"spec":62,"status":65,"children":66},"在线工具",{"name":17,"creationTimestamp":61},"2026-09-14T00:35:08.171474Z",{"displayName":59,"href":63,"target":36,"priority":64,"menuName":8},"\u002Ftools",4,{"displayName":59,"href":63},[],{"displayName":68,"metadata":69,"spec":71,"status":74,"children":75},"知识星球",{"name":18,"creationTimestamp":70},"2026-09-14T00:35:08.199145Z",{"displayName":68,"href":72,"target":36,"priority":73,"menuName":8},"\u002Fzsxq",5,{"displayName":68,"href":72},[],{"displayName":77,"metadata":78,"spec":80,"status":83,"children":84},"特价云服务器",{"name":19,"creationTimestamp":79},"2026-09-25T15:30:59.201614Z",{"displayName":77,"href":81,"target":36,"priority":82,"menuName":8},"\u002Fserver",6,{"displayName":77,"href":81},[],{"metadata":86,"spec":91,"status":97,"postCount":73},{"name":87,"creationTimestamp":88,"labels":89},"jvm","2026-09-13T09:13:25.841121Z",{"haloweb.section":90},"interview",{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},"JVM 面试题","","JVM 面试题：内存区域、垃圾回收算法与收集器、类加载机制与线上调优参数。",13,false,{"permalink":98,"postCount":73,"visiblePostCount":73},"\u002Fcategories\u002Fjvm",[100,124,145,166,187],{"metadata":101,"spec":104,"status":113,"categories":118},{"name":102,"creationTimestamp":103},"post-jvm-oom-types-66061da5","2026-09-13T10:00:58.521007Z",{"title":105,"slug":106,"cover":93,"excerpt":107,"publishTime":109,"categories":110,"tags":111,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"常见的 OOM 有哪些？","jvm-oom-types",{"raw":93,"autoGenerate":108},true,"2026-09-13T10:00:58.572152Z",[87],[],"PUBLIC",{"permalink":114,"excerpt":115,"lastModifyTime":116,"phase":117},"\u002Farchives\u002Fjvm-oom-types","一、Java heap space 堆内存不足，对象太多或内存泄漏。排查：dump 堆快照，用 MAT 分析大对象\u002F泄漏点。 二、GC overhead limit exceeded GC 耗时过长（98% 时间用于 GC 且回收不到 2% 内存）。通常是堆太小或内存泄漏。 三、Java.lang.","2026-09-16T09:14:30.722962Z","PUBLISHED",[119],{"metadata":120,"spec":122,"status":123,"postCount":73},{"name":87,"creationTimestamp":88,"labels":121},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":125,"spec":128,"status":135,"categories":139},{"name":126,"creationTimestamp":127},"post-jvm-class-loading-e984c960","2026-09-13T10:00:58.362832Z",{"title":129,"slug":130,"cover":93,"excerpt":131,"publishTime":132,"categories":133,"tags":134,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"类加载过程是怎样的？","jvm-class-loading",{"raw":93,"autoGenerate":108},"2026-09-13T10:00:58.408526Z",[87],[],{"permalink":136,"excerpt":137,"lastModifyTime":138,"phase":117},"\u002Farchives\u002Fjvm-class-loading","一、五个阶段 加载：通过类的全限定名获取二进制字节流，在内存中生成 Class 对象。 验证：校验字节码的合法性（魔数、版本、语义）。 准备：为类的静态变量分配内存并赋默认值（零值），final static 在编译期已赋值。 解析：把符号引用替换为直接引用。 初始化：执行 \u003Cclinit> 方法，","2026-09-16T09:13:36.695610Z",[140],{"metadata":141,"spec":143,"status":144,"postCount":73},{"name":87,"creationTimestamp":88,"labels":142},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":146,"spec":149,"status":156,"categories":160},{"name":147,"creationTimestamp":148},"post-jvm-cms-vs-g1-a6ba005b","2026-09-13T10:00:58.169843Z",{"title":150,"slug":151,"cover":93,"excerpt":152,"publishTime":153,"categories":154,"tags":155,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"CMS 和 G1 的区别？","jvm-cms-vs-g1",{"raw":93,"autoGenerate":108},"2026-09-13T10:00:58.215157Z",[87],[],{"permalink":157,"excerpt":158,"lastModifyTime":159,"phase":117},"\u002Farchives\u002Fjvm-cms-vs-g1","一、CMS 基于标记-清除算法。 以最短停顿时间为目标。 流程：初始标记（STW）→ 并发标记 → 重新标记（STW）→ 并发清除。 缺点：内存碎片、并发阶段消耗 CPU、浮动垃圾、可能 Concurrent Mode Failure 退化为 Serial Old。 二、G1 把堆分成多个 Regi","2026-09-16T09:12:31.222727Z",[161],{"metadata":162,"spec":164,"status":165,"postCount":73},{"name":87,"creationTimestamp":88,"labels":163},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":167,"spec":170,"status":177,"categories":181},{"name":168,"creationTimestamp":169},"post-jvm-gc-algorithms-f3d021b9","2026-09-13T10:00:57.985775Z",{"title":171,"slug":172,"cover":93,"excerpt":173,"publishTime":174,"categories":175,"tags":176,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"常见的垃圾回收算法？","jvm-gc-algorithms",{"raw":93,"autoGenerate":108},"2026-09-13T10:00:58.037353Z",[87],[],{"permalink":178,"excerpt":179,"lastModifyTime":180,"phase":117},"\u002Farchives\u002Fjvm-gc-algorithms","一、判断对象是否可回收 引用计数法：对象被引用计数 +1，为 0 则回收。无法解决循环引用。 可达性分析：从 GC Roots 出发，不可达的对象可回收。GC Roots 包括栈中引用、静态变量、常量、JNI 引用。 二、回收算法 标记-清除：标记存活对象，清除垃圾。缺点：内存碎片。 标记-复制：内","2026-09-16T09:13:37.177956Z",[182],{"metadata":183,"spec":185,"status":186,"postCount":73},{"name":87,"creationTimestamp":88,"labels":184},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":188,"spec":191,"status":198,"categories":202},{"name":189,"creationTimestamp":190},"post-jvm-memory-structure-42710c3c","2026-09-13T10:00:57.786002Z",{"title":192,"slug":193,"cover":93,"excerpt":194,"publishTime":195,"categories":196,"tags":197,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"JVM 运行时内存结构？","jvm-memory-structure",{"raw":93,"autoGenerate":108},"2026-09-13T10:00:57.832357Z",[87],[],{"permalink":199,"excerpt":200,"lastModifyTime":201,"phase":117},"\u002Farchives\u002Fjvm-memory-structure","一、线程私有 程序计数器：记录当前线程执行的字节码行号，唯一不会 OOM 的区域。 虚拟机栈：每个方法调用创建一个栈帧，存局部变量、操作数栈、动态链接。栈深度过深抛 StackOverflowError。 本地方法栈：为 native 方法服务。 二、线程共享 堆：对象实例和数组，GC 主要区域，可","2026-09-16T09:13:37.671380Z",[203],{"metadata":204,"spec":206,"status":207,"postCount":73},{"name":87,"creationTimestamp":88,"labels":205},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":209,"spec":210,"status":214,"categories":215,"content":221},{"name":147,"creationTimestamp":148},{"title":150,"slug":151,"cover":93,"excerpt":211,"publishTime":153,"categories":212,"tags":213,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},{"raw":93,"autoGenerate":108},[87],[],{"permalink":157,"excerpt":158,"lastModifyTime":159,"phase":117},[216],{"metadata":217,"spec":219,"status":220,"postCount":73},{"name":87,"creationTimestamp":88,"labels":218},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"content":222,"raw":222},"\u003Ch2>一、CMS\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>基于标记-清除算法。\u003C\u002Fli>\n\u003Cli>以最短停顿时间为目标。\u003C\u002Fli>\n\u003Cli>流程：初始标记（STW）→ 并发标记 → 重新标记（STW）→ 并发清除。\u003C\u002Fli>\n\u003Cli>缺点：内存碎片、并发阶段消耗 CPU、浮动垃圾、可能 Concurrent Mode Failure 退化为 Serial Old。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>二、G1\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>把堆分成多个 Region，每个 Region 可充当 Eden\u002FSurvivor\u002FOld\u002FHumongous。\u003C\u002Fli>\n\u003Cli>整体标记-整理，局部复制，无碎片。\u003C\u002Fli>\n\u003Cli>可预测停顿时间：根据每个 Region 的回收价值，优先回收垃圾多的 Region。\u003C\u002Fli>\n\u003Cli>流程：初始标记 → 并发标记 → 最终标记 → 筛选回收（STW）。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>三、选择\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>堆较小、追求低延迟 → CMS。\u003C\u002Fli>\n\u003Cli>堆大（&gt;4G）、可预测停顿 → G1（JDK 9 默认）。\u003C\u002Fli>\n\u003C\u002Ful>"]