java堆个人理解

heap是oom发生的聚集地,它存储着几乎所有的对象实例,堆是由垃圾回收器自动回收管理,通常情况下堆占有内存空间是最大的,无节制创建对象会耗尽内存,-Xms256 表示memory start 表示启动时分配内存 - Xmx 1024表示 表示memory max 最大虚拟机分配内存1024兆,服务器运行时不断地扩大收缩内存造成不必要的系统压力通常在线上环境设置一样大

堆分成两块一个新生代和老年代,对象产生之初放在新生代 ,步入暮年进入老年代但是也有异常就是老年代会接收新生代无法接受的超大对象

新生代又分为 Eden + 2个survivor 绝大部分对象存在Eden上当Eden装满的时候触发YGC

新生代垃圾回将存活的对象放到survivor中的没有使用的区域将当前空间完全清除如果YGC移送的对象大于survivor空间直接送入

老年代 每个对象都有一个计数器每次垃圾回收的时候存活对象count + 1 防止个别对象一直survivor区域跳来跳去 达到某个阈值也被清除掉 -Xx:MaxTeningThresHold 设置1一次垃圾回购直接老年代 

创建一个对象首先放入Eden 区域如果放的下 放入 否则触发 YGC 

继续判断 Eden是否放的下放的下 放入 放不下 直接放入Old区域

判断OLd区域是否放的下 放的下放入 放不下触发Full Garbage Collection

继续判断放下不 放得下 放入 OLD区域 放不下 OOM

YGC 即是 Young Garbage Collection

扫描二维码关注公众号,回复: 4592366 查看本文章

首先判断Survivor放的下不 放的下放入 放不下 放入老年代OLD

放置s0/s1 区域 若达到设置阈值也直接放到老年代等待下次垃圾回收清除

猜你喜欢

转载自blog.csdn.net/m0_38105216/article/details/85097040