1. JVM 运行时内存划分
1.1 整体分布
主要分为 :
jvm 内存
计数器 : 利用自增特性,主持线程顺次执行栈中的指令; JVM栈 : 由栈帧组成,每个栈帧包含当前方法的入口,返回信息,参数和变量,基础类型和对象的引用等; 本地方法栈 : 主要维护JNI相关的信息 堆 : 用于存放程序运行中创建的对象数据;
本地内存
元数据区 : 用于存放永久对象的区域; 直接内存 : 用于存放堆外内存,直接使用操作系统本身内存的区域(如 NIO部分类库实例);
图中,绿色为线程私有的,换色则属线程公用;
1.2 堆内存划分
年轻代
Eden : 新对象的存放之地;占用内存达到阈值后会触发youngGC,每经历一次youngGC存活下来的对象都会涨一岁,岁数到达年龄阈值(默认16岁)后会进入年老代; servivor0 : 幸存区,用于youngGC时,临时存放幸存的对象; servivor1 : 同servivor0; servivor0, servivor1 配合Eden,使得youngGC时,不产生内存碎片,同时保证了新生内存都在Eden区; 参考文章 : 为什么JVM新生代中有两个survivor?
年老代
用于存放高龄对象,占满后会引发fullGC;
原文地址:https://cloud.tencent.com/developer/article/2024217
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。