JAVA面试-JVM篇 06-字符串常量池为什么要移到堆中

JAVA面试-JVM篇 06-字符串常量池为什么要移到堆中

文章概述

字符串常量池在 JDK7 之前存放在永久代(PermGen)中,JDK7 将其移到了中。很多人误以为这是 JDK8 元空间替换永久代时才发生的,实际上是 JDK7 先移走了字符串常量池,JDK8 才彻底移除永久代。本文讲清移动的原因和好处。


一、常量池的位置变迁

#mermaid-svg-SU9riNNXFMlidOQx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SU9riNNXFMlidOQx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SU9riNNXFMlidOQx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SU9riNNXFMlidOQx .error-icon{fill:#552222;}#mermaid-svg-SU9riNNXFMlidOQx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SU9riNNXFMlidOQx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SU9riNNXFMlidOQx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SU9riNNXFMlidOQx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SU9riNNXFMlidOQx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SU9riNNXFMlidOQx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SU9riNNXFMlidOQx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SU9riNNXFMlidOQx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SU9riNNXFMlidOQx .marker.cross{stroke:#333333;}#mermaid-svg-SU9riNNXFMlidOQx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SU9riNNXFMlidOQx p{margin:0;}#mermaid-svg-SU9riNNXFMlidOQx .edge{stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .section--1 rect,#mermaid-svg-SU9riNNXFMlidOQx .section--1 path,#mermaid-svg-SU9riNNXFMlidOQx .section--1 circle,#mermaid-svg-SU9riNNXFMlidOQx .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section--1 text{fill:#ffffff;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth--1{stroke-width:17;}#mermaid-svg-SU9riNNXFMlidOQx .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:#ffffff;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-0 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-0 path,#mermaid-svg-SU9riNNXFMlidOQx .section-0 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-SU9riNNXFMlidOQx .section-0 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-0{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-0{stroke-width:14;}#mermaid-svg-SU9riNNXFMlidOQx .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-1 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-1 path,#mermaid-svg-SU9riNNXFMlidOQx .section-1 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-1 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-1{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-1{stroke-width:11;}#mermaid-svg-SU9riNNXFMlidOQx .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-2 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-2 path,#mermaid-svg-SU9riNNXFMlidOQx .section-2 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-2 text{fill:#ffffff;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-2{stroke-width:8;}#mermaid-svg-SU9riNNXFMlidOQx .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:#ffffff;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-3 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-3 path,#mermaid-svg-SU9riNNXFMlidOQx .section-3 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-3 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-3{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-3{stroke-width:5;}#mermaid-svg-SU9riNNXFMlidOQx .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-4 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-4 path,#mermaid-svg-SU9riNNXFMlidOQx .section-4 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-4 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-4{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-4{stroke-width:2;}#mermaid-svg-SU9riNNXFMlidOQx .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-5 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-5 path,#mermaid-svg-SU9riNNXFMlidOQx .section-5 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-5 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-5{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-5{stroke-width:-1;}#mermaid-svg-SU9riNNXFMlidOQx .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-6 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-6 path,#mermaid-svg-SU9riNNXFMlidOQx .section-6 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-6 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-6{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-6{stroke-width:-4;}#mermaid-svg-SU9riNNXFMlidOQx .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-7 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-7 path,#mermaid-svg-SU9riNNXFMlidOQx .section-7 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-7 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-7{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-7{stroke-width:-7;}#mermaid-svg-SU9riNNXFMlidOQx .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-8 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-8 path,#mermaid-svg-SU9riNNXFMlidOQx .section-8 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-8 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-8{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-8{stroke-width:-10;}#mermaid-svg-SU9riNNXFMlidOQx .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-9 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-9 path,#mermaid-svg-SU9riNNXFMlidOQx .section-9 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-9 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-9{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-9{stroke-width:-13;}#mermaid-svg-SU9riNNXFMlidOQx .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-10 rect,#mermaid-svg-SU9riNNXFMlidOQx .section-10 path,#mermaid-svg-SU9riNNXFMlidOQx .section-10 circle,#mermaid-svg-SU9riNNXFMlidOQx .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-10 text{fill:black;}#mermaid-svg-SU9riNNXFMlidOQx .node-icon-10{font-size:40px;color:black;}#mermaid-svg-SU9riNNXFMlidOQx .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .edge-depth-10{stroke-width:-16;}#mermaid-svg-SU9riNNXFMlidOQx .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SU9riNNXFMlidOQx .lineWrapper line{stroke:black;}#mermaid-svg-SU9riNNXFMlidOQx .disabled,#mermaid-svg-SU9riNNXFMlidOQx .disabled circle,#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:lightgray;}#mermaid-svg-SU9riNNXFMlidOQx .disabled text{fill:#efefef;}#mermaid-svg-SU9riNNXFMlidOQx .section-root rect,#mermaid-svg-SU9riNNXFMlidOQx .section-root path,#mermaid-svg-SU9riNNXFMlidOQx .section-root circle{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-SU9riNNXFMlidOQx .section-root text{fill:#ffffff;}#mermaid-svg-SU9riNNXFMlidOQx .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-SU9riNNXFMlidOQx .edge{fill:none;}#mermaid-svg-SU9riNNXFMlidOQx .eventWrapper{filter:brightness(120%);}#mermaid-svg-SU9riNNXFMlidOQx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} JDK6 字符串常量池在永久代 FullGC时才回收intern字符串 JDK7 字符串常量池移到堆 Minor GC即可回收 为移除永久代做准备 JDK8 永久代→元空间 字符串常量池仍在堆 彻底告别永久代 字符串常量池位置演变

注意 :移动发生在 JDK7,JDK8 是移除了永久代本身,字符串常量池仍然在堆中。


二、移动前后的对比

#mermaid-svg-rV1fc5iCVu4NEtNn{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rV1fc5iCVu4NEtNn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rV1fc5iCVu4NEtNn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rV1fc5iCVu4NEtNn .error-icon{fill:#552222;}#mermaid-svg-rV1fc5iCVu4NEtNn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rV1fc5iCVu4NEtNn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rV1fc5iCVu4NEtNn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rV1fc5iCVu4NEtNn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rV1fc5iCVu4NEtNn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rV1fc5iCVu4NEtNn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rV1fc5iCVu4NEtNn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rV1fc5iCVu4NEtNn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rV1fc5iCVu4NEtNn .marker.cross{stroke:#333333;}#mermaid-svg-rV1fc5iCVu4NEtNn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rV1fc5iCVu4NEtNn p{margin:0;}#mermaid-svg-rV1fc5iCVu4NEtNn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rV1fc5iCVu4NEtNn .cluster-label text{fill:#333;}#mermaid-svg-rV1fc5iCVu4NEtNn .cluster-label span{color:#333;}#mermaid-svg-rV1fc5iCVu4NEtNn .cluster-label span p{background-color:transparent;}#mermaid-svg-rV1fc5iCVu4NEtNn .label text,#mermaid-svg-rV1fc5iCVu4NEtNn span{fill:#333;color:#333;}#mermaid-svg-rV1fc5iCVu4NEtNn .node rect,#mermaid-svg-rV1fc5iCVu4NEtNn .node circle,#mermaid-svg-rV1fc5iCVu4NEtNn .node ellipse,#mermaid-svg-rV1fc5iCVu4NEtNn .node polygon,#mermaid-svg-rV1fc5iCVu4NEtNn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rV1fc5iCVu4NEtNn .rough-node .label text,#mermaid-svg-rV1fc5iCVu4NEtNn .node .label text,#mermaid-svg-rV1fc5iCVu4NEtNn .image-shape .label,#mermaid-svg-rV1fc5iCVu4NEtNn .icon-shape .label{text-anchor:middle;}#mermaid-svg-rV1fc5iCVu4NEtNn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rV1fc5iCVu4NEtNn .rough-node .label,#mermaid-svg-rV1fc5iCVu4NEtNn .node .label,#mermaid-svg-rV1fc5iCVu4NEtNn .image-shape .label,#mermaid-svg-rV1fc5iCVu4NEtNn .icon-shape .label{text-align:center;}#mermaid-svg-rV1fc5iCVu4NEtNn .node.clickable{cursor:pointer;}#mermaid-svg-rV1fc5iCVu4NEtNn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rV1fc5iCVu4NEtNn .arrowheadPath{fill:#333333;}#mermaid-svg-rV1fc5iCVu4NEtNn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rV1fc5iCVu4NEtNn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rV1fc5iCVu4NEtNn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rV1fc5iCVu4NEtNn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rV1fc5iCVu4NEtNn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rV1fc5iCVu4NEtNn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rV1fc5iCVu4NEtNn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rV1fc5iCVu4NEtNn .cluster text{fill:#333;}#mermaid-svg-rV1fc5iCVu4NEtNn .cluster span{color:#333;}#mermaid-svg-rV1fc5iCVu4NEtNn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rV1fc5iCVu4NEtNn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rV1fc5iCVu4NEtNn rect.text{fill:none;stroke-width:0;}#mermaid-svg-rV1fc5iCVu4NEtNn .icon-shape,#mermaid-svg-rV1fc5iCVu4NEtNn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rV1fc5iCVu4NEtNn .icon-shape p,#mermaid-svg-rV1fc5iCVu4NEtNn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rV1fc5iCVu4NEtNn .icon-shape .label rect,#mermaid-svg-rV1fc5iCVu4NEtNn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rV1fc5iCVu4NEtNn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rV1fc5iCVu4NEtNn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rV1fc5iCVu4NEtNn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} JDK7+

字符串常量池
普通对象
GC

Minor/Full GC均可回收
JDK6
永久代
字符串常量池
类信息/静态变量/...
GC

仅Full GC回收

对比维度 JDK6(永久代内) JDK7+(堆内)
位置 永久代(方法区)
GC 回收时机 仅 Full GC 时回收 Minor GC + Full GC 均可回收
默认大小 固定,受 -XX:MaxPermSize 限制 整个堆空间可用
OOM 风险 高,intern() 过多直接 OOM 低,内存更大且 GC 及时

三、为什么要移到堆中

#mermaid-svg-DdQNU8P6NSYY8OCw{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DdQNU8P6NSYY8OCw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DdQNU8P6NSYY8OCw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DdQNU8P6NSYY8OCw .error-icon{fill:#552222;}#mermaid-svg-DdQNU8P6NSYY8OCw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DdQNU8P6NSYY8OCw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DdQNU8P6NSYY8OCw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DdQNU8P6NSYY8OCw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DdQNU8P6NSYY8OCw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DdQNU8P6NSYY8OCw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DdQNU8P6NSYY8OCw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DdQNU8P6NSYY8OCw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DdQNU8P6NSYY8OCw .marker.cross{stroke:#333333;}#mermaid-svg-DdQNU8P6NSYY8OCw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DdQNU8P6NSYY8OCw p{margin:0;}#mermaid-svg-DdQNU8P6NSYY8OCw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DdQNU8P6NSYY8OCw .cluster-label text{fill:#333;}#mermaid-svg-DdQNU8P6NSYY8OCw .cluster-label span{color:#333;}#mermaid-svg-DdQNU8P6NSYY8OCw .cluster-label span p{background-color:transparent;}#mermaid-svg-DdQNU8P6NSYY8OCw .label text,#mermaid-svg-DdQNU8P6NSYY8OCw span{fill:#333;color:#333;}#mermaid-svg-DdQNU8P6NSYY8OCw .node rect,#mermaid-svg-DdQNU8P6NSYY8OCw .node circle,#mermaid-svg-DdQNU8P6NSYY8OCw .node ellipse,#mermaid-svg-DdQNU8P6NSYY8OCw .node polygon,#mermaid-svg-DdQNU8P6NSYY8OCw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DdQNU8P6NSYY8OCw .rough-node .label text,#mermaid-svg-DdQNU8P6NSYY8OCw .node .label text,#mermaid-svg-DdQNU8P6NSYY8OCw .image-shape .label,#mermaid-svg-DdQNU8P6NSYY8OCw .icon-shape .label{text-anchor:middle;}#mermaid-svg-DdQNU8P6NSYY8OCw .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DdQNU8P6NSYY8OCw .rough-node .label,#mermaid-svg-DdQNU8P6NSYY8OCw .node .label,#mermaid-svg-DdQNU8P6NSYY8OCw .image-shape .label,#mermaid-svg-DdQNU8P6NSYY8OCw .icon-shape .label{text-align:center;}#mermaid-svg-DdQNU8P6NSYY8OCw .node.clickable{cursor:pointer;}#mermaid-svg-DdQNU8P6NSYY8OCw .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DdQNU8P6NSYY8OCw .arrowheadPath{fill:#333333;}#mermaid-svg-DdQNU8P6NSYY8OCw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DdQNU8P6NSYY8OCw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DdQNU8P6NSYY8OCw .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DdQNU8P6NSYY8OCw .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DdQNU8P6NSYY8OCw .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DdQNU8P6NSYY8OCw .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DdQNU8P6NSYY8OCw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DdQNU8P6NSYY8OCw .cluster text{fill:#333;}#mermaid-svg-DdQNU8P6NSYY8OCw .cluster span{color:#333;}#mermaid-svg-DdQNU8P6NSYY8OCw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DdQNU8P6NSYY8OCw .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DdQNU8P6NSYY8OCw rect.text{fill:none;stroke-width:0;}#mermaid-svg-DdQNU8P6NSYY8OCw .icon-shape,#mermaid-svg-DdQNU8P6NSYY8OCw .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DdQNU8P6NSYY8OCw .icon-shape p,#mermaid-svg-DdQNU8P6NSYY8OCw .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DdQNU8P6NSYY8OCw .icon-shape .label rect,#mermaid-svg-DdQNU8P6NSYY8OCw .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DdQNU8P6NSYY8OCw .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DdQNU8P6NSYY8OCw .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DdQNU8P6NSYY8OCw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 为什么移到堆中
永久代大小固定

intern字符串多时易OOM
Full GC频率低

字符串无法及时回收
为移除永久代铺路

JDK8彻底移除PermGen
统一管理

字符串本质就是对象
堆空间大, 且可动态扩展
Minor GC就能回收

无用字符串及时释放
减少JVM复杂度
和普通对象一样

享受分代GC

原因一:永久代大小固定,频繁 OOM

java 复制代码
// 经典OOM场景
List<String> list = new ArrayList<>();
while (true) {
    list.add(String.valueOf(i++).intern());
}
  • JDK6 中上述代码会报 PermGen space OOM
  • 移入堆后,堆大小由 -Xmx 控制,可动态扩展,OOM 概率大幅降低

原因二:GC 回收效率提升

#mermaid-svg-ghDBz4LAFWvfFzfH{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ghDBz4LAFWvfFzfH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ghDBz4LAFWvfFzfH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ghDBz4LAFWvfFzfH .error-icon{fill:#552222;}#mermaid-svg-ghDBz4LAFWvfFzfH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ghDBz4LAFWvfFzfH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ghDBz4LAFWvfFzfH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ghDBz4LAFWvfFzfH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ghDBz4LAFWvfFzfH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ghDBz4LAFWvfFzfH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ghDBz4LAFWvfFzfH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ghDBz4LAFWvfFzfH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ghDBz4LAFWvfFzfH .marker.cross{stroke:#333333;}#mermaid-svg-ghDBz4LAFWvfFzfH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ghDBz4LAFWvfFzfH p{margin:0;}#mermaid-svg-ghDBz4LAFWvfFzfH defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-ghDBz4LAFWvfFzfH g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-ghDBz4LAFWvfFzfH g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-ghDBz4LAFWvfFzfH g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-ghDBz4LAFWvfFzfH g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-ghDBz4LAFWvfFzfH g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-ghDBz4LAFWvfFzfH .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-ghDBz4LAFWvfFzfH .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-ghDBz4LAFWvfFzfH .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-ghDBz4LAFWvfFzfH .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-ghDBz4LAFWvfFzfH .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-ghDBz4LAFWvfFzfH .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-ghDBz4LAFWvfFzfH .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-ghDBz4LAFWvfFzfH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ghDBz4LAFWvfFzfH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ghDBz4LAFWvfFzfH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ghDBz4LAFWvfFzfH .edgeLabel .label text{fill:#333;}#mermaid-svg-ghDBz4LAFWvfFzfH .label div .edgeLabel{color:#333;}#mermaid-svg-ghDBz4LAFWvfFzfH .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-ghDBz4LAFWvfFzfH .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-ghDBz4LAFWvfFzfH .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-ghDBz4LAFWvfFzfH .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-ghDBz4LAFWvfFzfH .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-ghDBz4LAFWvfFzfH .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ghDBz4LAFWvfFzfH .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ghDBz4LAFWvfFzfH #statediagram-barbEnd{fill:#333333;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ghDBz4LAFWvfFzfH .cluster-label,#mermaid-svg-ghDBz4LAFWvfFzfH .nodeLabel{color:#131300;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-ghDBz4LAFWvfFzfH .note-edge{stroke-dasharray:5;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-note text{fill:black;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram-note .nodeLabel{color:black;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagram .edgeLabel{color:red;}#mermaid-svg-ghDBz4LAFWvfFzfH #dependencyStart,#mermaid-svg-ghDBz4LAFWvfFzfH #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-ghDBz4LAFWvfFzfH .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ghDBz4LAFWvfFzfH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 字符串常量池在永久代
字符串常量池在堆
只在Full
触发频率低,字符串常驻内存
Minor
无用字符串快速清理,内存利用率高

  • 永久代的 GC 依赖 Full GC,触发频率低,无用字符串长期占用内存
  • 移入堆后,Minor GC 就能回收不再被引用的 intern 字符串

原因三:为移除永久代做准备

  • Oracle 决定在 JDK8 用元空间替换永久代,元空间只存类元信息
  • 字符串常量池本质上存储的是字符串对象的引用,属于实例数据,放在堆中更合理

四、验证实验

#mermaid-svg-f8EnaNuwfQ2yHS9T{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-f8EnaNuwfQ2yHS9T .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-f8EnaNuwfQ2yHS9T .error-icon{fill:#552222;}#mermaid-svg-f8EnaNuwfQ2yHS9T .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-f8EnaNuwfQ2yHS9T .marker{fill:#333333;stroke:#333333;}#mermaid-svg-f8EnaNuwfQ2yHS9T .marker.cross{stroke:#333333;}#mermaid-svg-f8EnaNuwfQ2yHS9T svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-f8EnaNuwfQ2yHS9T p{margin:0;}#mermaid-svg-f8EnaNuwfQ2yHS9T .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-f8EnaNuwfQ2yHS9T .cluster-label text{fill:#333;}#mermaid-svg-f8EnaNuwfQ2yHS9T .cluster-label span{color:#333;}#mermaid-svg-f8EnaNuwfQ2yHS9T .cluster-label span p{background-color:transparent;}#mermaid-svg-f8EnaNuwfQ2yHS9T .label text,#mermaid-svg-f8EnaNuwfQ2yHS9T span{fill:#333;color:#333;}#mermaid-svg-f8EnaNuwfQ2yHS9T .node rect,#mermaid-svg-f8EnaNuwfQ2yHS9T .node circle,#mermaid-svg-f8EnaNuwfQ2yHS9T .node ellipse,#mermaid-svg-f8EnaNuwfQ2yHS9T .node polygon,#mermaid-svg-f8EnaNuwfQ2yHS9T .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-f8EnaNuwfQ2yHS9T .rough-node .label text,#mermaid-svg-f8EnaNuwfQ2yHS9T .node .label text,#mermaid-svg-f8EnaNuwfQ2yHS9T .image-shape .label,#mermaid-svg-f8EnaNuwfQ2yHS9T .icon-shape .label{text-anchor:middle;}#mermaid-svg-f8EnaNuwfQ2yHS9T .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-f8EnaNuwfQ2yHS9T .rough-node .label,#mermaid-svg-f8EnaNuwfQ2yHS9T .node .label,#mermaid-svg-f8EnaNuwfQ2yHS9T .image-shape .label,#mermaid-svg-f8EnaNuwfQ2yHS9T .icon-shape .label{text-align:center;}#mermaid-svg-f8EnaNuwfQ2yHS9T .node.clickable{cursor:pointer;}#mermaid-svg-f8EnaNuwfQ2yHS9T .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-f8EnaNuwfQ2yHS9T .arrowheadPath{fill:#333333;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-f8EnaNuwfQ2yHS9T .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-f8EnaNuwfQ2yHS9T .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-f8EnaNuwfQ2yHS9T .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-f8EnaNuwfQ2yHS9T .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-f8EnaNuwfQ2yHS9T .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-f8EnaNuwfQ2yHS9T .cluster text{fill:#333;}#mermaid-svg-f8EnaNuwfQ2yHS9T .cluster span{color:#333;}#mermaid-svg-f8EnaNuwfQ2yHS9T div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-f8EnaNuwfQ2yHS9T .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-f8EnaNuwfQ2yHS9T rect.text{fill:none;stroke-width:0;}#mermaid-svg-f8EnaNuwfQ2yHS9T .icon-shape,#mermaid-svg-f8EnaNuwfQ2yHS9T .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-f8EnaNuwfQ2yHS9T .icon-shape p,#mermaid-svg-f8EnaNuwfQ2yHS9T .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-f8EnaNuwfQ2yHS9T .icon-shape .label rect,#mermaid-svg-f8EnaNuwfQ2yHS9T .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-f8EnaNuwfQ2yHS9T .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-f8EnaNuwfQ2yHS9T .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-f8EnaNuwfQ2yHS9T :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} JDK7+
java -XX:MaxMetaspaceSize=10M

-Xmx100M StringTest
结果:正常运行(不受Metaspace限制)
JDK6
java -XX:MaxPermSize=10M -XX:PermSize=10M

-Xmx100M StringTest
结果:抛出 PermGen OOM

intern() 大量生成字符串:

  • JDK6:即使堆还有大量空间,也会因永久代满而 OOM
  • JDK7+:只要堆空间充足,程序正常运行