外国网站的浏览器下载,wordpress文章批量,网站设计业务,网站建设选择数据库一、JVM堆内存介绍
Java大多数对象都是存放在堆中#xff0c;堆内存是完全自动化管理#xff0c;根据垃圾回收机制不同#xff0c;Java堆有不同的结构#xff0c;下面是我们一台生产环境服务器JVM堆内存空间分配情况#xff0c;JVM只设置了-Xms2048M -Xmx2048M。 1、JVM堆…一、JVM堆内存介绍
Java大多数对象都是存放在堆中堆内存是完全自动化管理根据垃圾回收机制不同Java堆有不同的结构下面是我们一台生产环境服务器JVM堆内存空间分配情况JVM只设置了-Xms2048M -Xmx2048M。 1、JVM堆内存为什么要分代
分代目的主要是优化GC的性能做了分代后在GC时不用对整个堆内存进行扫描因为Java很多对象是朝生夕死这部分可以单独放在一个区便于及时回收掉。
2、新生代
伊甸区Eden)新创建的对象先被分配在Eden区存放。
幸存区1、幸存区2当Eden区满的时候进行Minor GC,如果对象还存活的会被移到幸存区以后每次GC时对象的年龄会加1当年龄加到一定程度就会被移到老年代幸存区分成两个区每次只使用一个区当一个区块填满了后会将还活着对象复制到另一个区。
新生代采用复制算法进行垃圾回收垃圾回收进行的比较频繁,每次执行Minor GC耗时比较短监测两周数据每天执行28次Minor GC,每次耗时10毫秒
3、老年代
老年代对象比较稳定当有新生代对象移到老年代如果空间不够时会触发MajorGC采用标记清除法即扫描内存区块后标记出存活的对象然后将未标记的进行回收MajorGC耗时比较长监测两周数据只有启动的时候执行了4次MajorGC每次耗时200毫秒。
二、监测堆内存区空间变化
1、使用jstat监测堆内存空间使用情况
使用Shell脚本每隔一分钟获取一次内存占用数据并写入数据库。 2、内存空间使用数据分析 从图中可以看出
1、YGC和EU(伊甸区内存使用大小)的关系当EU占满了触发了YGC然后EU下降。
2、S0和S1空间使用相互切换当S0空的时候新生代幸存对象放在S1当S1空的时候新生代幸存对象放在S0。
3、老年代的占用空间和FGC
跟踪了从7月13号~7月19号 OU从83M增长为107M远远达不到分配的1365.5M另外每周都有系统发布JVM会重启所以都没有发生过FGC新系统上线时要特别关注FGC的情况最常见的是当异常情况下把表的数据全部加载到内存这种极易造成堆内存快速增长然后频繁FGC,甚至发生OOM。
三、Java对象在堆中分配的流程图
注网上找的图片