在 Java 中,堆内存(Heap)是 JVM 运行时数据区中最大的一块,主要用于存放对象实例和数组。下面从整体结构、分配规则、触发时机、相关参数几个方面说明。
JDK 8 及以前常见,JDK 9+ 逐步转向 G1 / ZGC
堆内存(Heap)
├── 新生代(Young Generation)
│ ├── Eden 区
│ ├── Survivor From(S0)
│ └── Survivor To(S1)
└── 老年代(Old Generation)
当使用 new 创建对象时:
Object obj = new Object();
-XX:PretenureSizeThreshold 设置大小-XX:PretenureSizeThreshold=1M
-XX:MaxTenuringThreshold(默认 15)→ 老年代-XX:+UseTLAB (默认开启)
-Xms512m # 初始堆大小
-Xmx1024m # 最大堆大小
-Xmn256m
-XX:NewRatio=2 # 老年代:新生代 = 2:1
-XX:SurvivorRatio=8 # Eden:Survivor = 8:1:1
| 回收器 | 堆结构特点 |
|---|---|
| Serial / Parallel | 分代明确 |
| CMS | 老年代并发 |
| G1 | Region 化堆 |
| ZGC | 不分代,颜色指针 |
public class Test {
public static void main(String[] args) {
byte[] b = new byte[1024 * 1024]; // 可能直接进老年代
}
}
如果你愿意,我也可以:
你更想了解哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。