JVM堆空间详解

一、核心概述

  • 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域
  • Java堆区在JVM启动的时候即被创建,空间大小同时确定,是JVM管理的最大内存空间
  • 堆内存大小可调节
  • 所有线程共享Java堆,但是可以划分线程私有缓冲区(TLAB),提升并发能力
  • 几乎所有对象实例以及数组都应当在运行时分配在堆上
  • 栈帧中保存引用,引用指向对象或数组在堆中的位置
  • 方法结束后,堆中的对象不会马上被移除,垃圾收集时才会被移除
  • 堆,是GC(Garbage Collection,垃圾收集器)执行垃圾回收的重点区域(栈没有垃圾回收)

二、内存细分

现代垃圾收集器大部分都是基于分代收集理论设计,堆空间细分为:

  • -Xms:初始内存大小
  • -Xmx:最大内存大小

三、OOM说明

工具:java visualVM

可以查看java线程,JVM参数及堆空间使用情况等信息

四、年轻代与老年代

Java堆区可以分为年轻代(YoungGen)和老年代(OldGen)

  • 年轻代可以划分为Eden空间(伊甸园)、Survivor0空间和Survivor1空间(from区、to区)

五、对象分配过程

5.1、一般过程

  • 剩余对象每次会存放到S1和S2中,空的区域
  • 只有Eden存满时会触发YoungGC,S1和S2存满时不会触发
  • 垃圾回收,频繁在新生区收集,很少在养老区收集,几乎不在永久区/元空间收集

5.2、特殊情况

1、Eden剩余空间不足以存放新对象

六、GC

6.1、GC概念

6.2、GC触发机制

七、堆空间分代思想

相关推荐
甲方大人请饶命16 小时前
SSM-基础
java·数据库·spring
谷雨不太卷16 小时前
Linux基础IO
java·开发语言
小新同学^O^17 小时前
简单学习 --> 文件IO
java·学习·文件io
洛水水17 小时前
【力扣100题】29. 对称二叉树
算法·leetcode·职场和发展
czhc114007566317 小时前
modbus 512 断线重连 db browser for sqlite
jvm
大熊背17 小时前
近期遇到的一些问题总结(四)
算法·拍照·白平衡·isp pipeline
吴声子夜歌17 小时前
Java——Arrays
java·算法·排序算法
fanzhonghong17 小时前
javaWeb开发之Maven高级
java·开发语言·spring boot·spring cloud·私服
洛水水17 小时前
【力扣100题】26. 二叉树的中序遍历
算法·leetcode·深度优先
sheeta199817 小时前
LeetCode 每日一题笔记 日期:2026.05.11 题目:2553. 分割数组中数字的数位
笔记·算法·leetcode