侧边栏壁纸
博主头像
惊羽博主等级

hi ,我是惊羽,前生物学逃兵,现系统工程沉迷者 . 贝壳签约工程师 , 曾被雇佣为 联拓数科 · 支付研发工程师 、京东 · 京东数科 · 研发工程师、中国移动 · 雄安产业研究院 · 业务中台技术负责人 .

  • 累计撰写 100 篇文章
  • 累计创建 14 个标签
  • 累计收到 9 条评论

jdk(4) - JVM内存

惊羽
2021-06-18 / 0 评论 / 0 点赞 / 161 阅读 / 951 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-06-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. JVM 运行时内存划分

1.1 整体分布

主要分为 :

jvm 内存

计数器 : 利用自增特性,主持线程顺次执行栈中的指令;
JVM栈 : 由栈帧组成,每个栈帧包含当前方法的入口,返回信息,参数和变量,基础类型和对象的引用等;
本地方法栈 : 主要维护JNI相关的信息
堆 : 用于存放程序运行中创建的对象数据;

本地内存

元数据区 : 用于存放永久对象的区域;
直接内存 : 用于存放堆外内存,直接使用操作系统本身内存的区域(如 NIO部分类库实例);

a0a919986d1b42498ae8301591b55fdc.png
图中,绿色为线程私有的,换色则属线程公用;

1.2 堆内存划分

年轻代

Eden : 新对象的存放之地;占用内存达到阈值后会触发youngGC,每经历一次youngGC存活下来的对象都会涨一岁,岁数到达年龄阈值(默认16岁)后会进入年老代;
servivor0 : 幸存区,用于youngGC时,临时存放幸存的对象;
servivor1 : 同servivor0;
servivor0, servivor1 配合Eden,使得youngGC时,不产生内存碎片,同时保证了新生内存都在Eden区;
参考文章 : 为什么JVM新生代中有两个survivor?

年老代

用于存放高龄对象,占满后会引发fullGC;
91b1bbc138d345b99dda6e2f8d5ee79b.png

0
广告 广告

评论区