我们可以用jvm自带的命令行工具,这里要注意一下要用oracle版本的,不要Linux自带的openjdk.我们敲击jps就能看到Java进程,在用jstat -gc pid 查看垃圾回收进程,上面堆内存分为新生代...这里新生代内存大小和老年代内存大小一般是1:2.其中新生代又分为幸存者0区,幸存者1区,伊甸园区,比例为1:1:8。这个比例也可以条件的。每次新new的对象都会从0区转为1区。在到伊甸园区。...伊甸园区放不下在送到老年代。也就是新生代又百分之90的空间是可以使用的。当然超大对象是不经过新生代,老年代,直接oom的。这里注意一下一般jvm的堆内存是物理机的1/4到1/16。
当有一个新对象产生,需要分配空间; 首先会判断伊甸园区是否有内存空间,如果有内存空间,则直接将新对象保存在伊甸园区; 如果伊甸园区内存空间不足,会自动执行Minor GC操作,将伊甸园区无用的内存空间进行清理...;清理之后会判断伊甸园区的内存空间是否充足?...如果内存空间充足则将新的对象在伊甸园区进行分配; 如果执行了Minor GC操作,发现伊甸园区内存依然不足,那么会判断存活区,如果存活区有内存空间,那么会把伊甸园区的部分活跃对象保存到存活区,随后继续判断伊甸园区的空间是否充足...,如果充足,则在伊甸园区进行新对象内存空间的分配; 如果此时存活区也已没有内存空间,那么判断老年区,如果此时老年区空间充足,则将存活区中的活跃对象保存到老年区,而后存活区就会出现空余空间,而后伊甸园区将活跃对象保存在存活区之中...,而后在伊甸园区中为新对象开辟空间; 如果此时老年代也是满的,此时将产生Major GC(Full GC),进行老年代的内存清理; 如果老年代执行了Full GC之后,发现依然无法实现对象的保存
0.000 0 0.000 0.000 PS C:\> S0C:第一个幸存区的大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 EC:伊甸园区的大小...EU:伊甸园区的使用大小 OC:老年代大小 OU:老年代使用大小 MC:方法区大小 MU:方法区使用大小 CCSC:压缩类空间大小 CCSU:压缩类空间使用大小 YGC:年轻代垃圾回收次数 YGCT:...EU:伊甸园区的使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间 新生代内存统计 gcnewcapacity PS C:\> jstat -gcnewcapacity 6368...EC:当前伊甸园区大小 YGC:年轻代垃圾回收次数 FGC:老年代回收次数 老年代垃圾回收统计 gcold PS C:\> jstat -gcold 6368 MC MU...六、参考 jstat命令查看jvm的GC情况 (以Linux为例) jvm优化必知系列——监控工具 一个java内存泄漏的排查案例 ---- 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn
我们看到年轻代分为伊甸园区,幸存者0区,幸存者1 区。...这时候我们看一下代码中jjvm 的配置 最大对象包括年轻代和老年代=300, 幸存者和伊甸园的比例是1:8, 老年代和年轻代的比例是1:2 由此我们可以得出 伊甸园80 幸存者0:10 幸存者...1:10 老年代:200 从图上伊甸园的格子8X10 我们也能看出和我们的猜想是一样的。...首先伊甸园的格子数值是对象的编号,下面幸存者0 和1区的 格子里面有两个数值,第二个是年龄。也就是被回收一次,年龄加一,超过最大年龄就送到老年代。 默认是15 ,现在是3....一个伊甸园区加上幸存者区, 但是这个需要老年代的分配担保。 要是伊甸园区不够,全部进入老年代就直接引发fullgc .
gc pid 垃圾回收统计 [1240] - S0C:第一个幸存区的大小 - S1C:第二个幸存区的大小 - S0U:第一个幸存区的使用大小 - S1U:第二个幸存区的使用大小 - EC:伊甸园区的大小...- EU:伊甸园区的使用大小 - OC:老年代大小 - OU:老年代使用大小 - MC:方法区大小 - MU:方法区使用大小 - CCSC:压缩类空间大小 - CCSU:压缩类空间使用大小...- S0U:第一个幸存区的使用大小 - S1U:第二个幸存区的使用大小 - TT:对象在新生代存活的次数 - MTT:对象在新生代存活的最大次数 - DSS:期望的幸存区大小 - EC:伊甸园区的大小...- EU:伊甸园区的使用大小 - YGC:年轻代垃圾回收次数 - YGCT:年轻代垃圾回收消耗时间 jstat -gccapacity pid 堆内存统计 记忆这个命令可以根据单词组合记忆...EC:当前伊甸园区大小 YGC:年轻代垃圾回收次数 FGC:老年代回收次数 jstat -gcoldcapacity pid 老年代内存空间统计 [1240] OGCMN:老年代最小容量 OGCMX
new的对象先放伊甸园区。此区有大小限制。 当伊甸园的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(MinorGC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。...再加载新的对象放到伊甸园区。 然后将伊甸园中的剩余对象移动到幸存者0区。 如果再次触发垃圾回收,此时将伊甸园区和幸存者0区进行垃圾回收,剩下的对象就会放到幸存者1区。...(InterruptedException e) { e.printStackTrace(); } } } } 注意【伊甸园区
J9VMJIT jvm只有一个heap,大小可以调节,默认:实际使用1/64,试图申请内存的1/4(最大内存), -Xms1024m -Xmx1024m 堆内存细分 新生代 8:1:1----》伊甸园...垃圾回收都在伊甸园,老生区 伊甸园满了---》对伊甸园轻GC--->进入幸存区----》也满了---》对伊甸园,幸存区重GC-----》进入养老区---》又满了----》OOM 但进入老生区对象很少...dump 添加启动参数 -XX:+HeapDumpOnOutOfMemoryError GC算法 引用计数法,循环引用无法解决(不常使用) 复制算法(浪费一个幸存区,复制比较费时,存活度较低时常用) 伊甸园满了...-》轻GC---》到幸存区0(随机选一个) 伊甸园又满了---》轻GC--》存回对象会放到幸存区1,且就会把幸存区0的复制到幸存1,幸存0变为空 再此GC时,存活对象--》0,幸存1也复制到0 经历了15
S0:幸存1区当前使用比例 S1:幸存2区当前使用比例 E:伊甸园区使用比例 O:老年代使用比例 M:元数据区使用比例 CCS:压缩使用比例 YGC:年轻代垃圾回收次数 FGC:老年代垃圾回收次数 FGCT...S0C:第一个幸存区的大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 OC:老年代大小 OU:老年代使用大小...NGCMN:新生代最小容量 NGCMX:新生代最大容量 NGC:当前新生代容量 S0C:第一个幸存区大小 S1C:第二个幸存区的大小 EC:伊甸园区的大小 OGCMN:老年代最小容量 OGCMX:老年代最大容量...EU:伊甸园区的使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间 新生代内存统计 ?...EC:当前伊甸园区大小 YGC:年轻代垃圾回收次数 FGC:老年代回收次数 老年代垃圾回收统计 ?
新生区又分为两部分:伊甸园区(Eden space)和幸存者区(Survivor space)。所有的类都是在伊甸园区被new出来的。...当伊甸园区的空间用完时候,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC,也叫轻GC 或者是YGC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。...然后伊甸园中的剩余对象移动到幸存0区(也叫from区)。若幸存0区也满了,再对该地区进行垃圾回收,然后移动到1区(也叫to区)。 如果1区也满了怎么办呢?
失败类型 FailedMethod: 失败的方法 垃圾回收统计 S0C: 第一个幸存区的大小 S1C: 第二个幸存区的大小 S0U: 第一个幸存区的使用大小 S1U: 第二个幸存区的使用大小 EC: 伊甸园区的大小...EU: 伊甸园区的使用大小 OC: 老年代大小 OU: 老年代使用大小 MC: 方法区大小 MU: 方法区使用大小 CCSC: 压缩类空间大小 CCSU: 压缩类空间使用大小 YGC: 年轻代垃圾回收次数...S1C: 第二个幸存区的大小 S0U: 第一个幸存区的使用大小 S1U: 第二个幸存区的使用大小 TT: 对象在新生代存活的次数 MTT: 对象在新生代存活的最大次数 DSS: 期望的幸存区大小 EC: 伊甸园区的大小...EU: 伊甸园区的使用大小 YGC: 年轻代垃圾回收次数 YGCT: 年轻代垃圾回收消耗时间 新生代内存统计 NGCMN: 新生代最小容量 NGCMX: 新生代最大容量 NGC: 当前新生代容量 S0CMX...: 最大幸存1区大小 S0C: 当前幸存1区大小 S1CMX: 最大幸存2区大小 S1C: 当前幸存2区大小 ECMX: 最大伊甸园区大小 EC: 当前伊甸园区大小 YGC: 年轻代垃圾回收次数 FGC
打印出指定线程id=20220的gc 每隔250毫秒打印一次,总共打印10次 S0C 第一个幸存区的大小 S1C 第二个幸存区的大小 S0U 第一个幸存区的使用大小 S1U 第二个幸存区的使用大小 EC 伊甸园区的大小...EU 伊甸园区的使用大小 OC 老年代大小 OU 老年代使用大小 MC 方法区大小 MU 方法区使用大小 CCSC 压缩类空间大小 CCSU 压缩类空间使用大小 YGC 年轻代垃圾回收次数 YGCT...堆内存统计 jstat -gccapacity 20220 NGCMN 新生代最小容量 NGCMX 新生代最大容量 NGC 当前新生代容量 S0C 第一个幸存区大小 S1C 第二个幸存区的大小 EC 伊甸园区的大小...EU 伊甸园区的使用大小 YGC 年轻代垃圾回收次数 YGCT 年轻代垃圾回收消耗时间 关注最大最小新生代空间 jstat -gcnewcapacity 20220 NGCMN 新生代最小容量 NGCMX...新生代最大容量 NGC 当前新生代容量 S0CMX 最大幸存1区大小 S0C 当前幸存1区大小 S1CMX 最大幸存2区大小 S1C 当前幸存2区大小 ECMX 最大伊甸园区大小 EC 当前伊甸园区大小
优点:不会产生碎片 缺点:占用双倍的内存空间 三、 分代垃圾回收机制 创建新的对象时,默认采用伊甸园的内存 当伊甸园内存不足时,会发生Minor GC,对伊甸园进行一次垃圾回收,并采用复制算法将对象存放在幸存区...to,年龄+1(to和from会交换位置) 经过第一次垃圾回收之后,伊甸园的内存又充足了,当伊甸园内存再次不足时会发生第二次Minor GC,此时会对伊甸园和幸存区from进行垃圾回收,也会将存活的对象存放到...参数二:采用自适应调整伊甸园,晋升阈值和幸存区大小。
我们将新生代分为三个部分:伊甸园区和两个 survivor 区。 伊甸园区,即对象诞生的地方,存放所有新生的对象,与在西方中我们人类诞生的地方——伊甸园想对应。...4.5、 Copying(拷贝)算法在年轻代中的具体应用 第一次垃圾回收:首先将 10% 的幸存对象拷贝到第一个 survivor 中,即 s0 中,然后将整个伊甸园区进行清除。...如下图所示: 第二次垃圾回收:将伊甸园区中有用的对象拷贝到另一个 survivor 中,即 s1 中,再将之前 s0 中的对象(前提是有用)拷贝到 s1 中,对伊甸园区与第一个 s0 进行垃圾回收...如下图所示: 第三次垃圾回收:再次利用 s0,将之前存活的对象与伊甸园区中产生的新对象存放在 s0 中,对伊甸园区与 s1 进行二垃圾回收。...如下图所示: 第 n 次垃圾回收:如此循环往复利用新生代中的伊甸园区与 survivor 区即可。
亚当和夏娃的故事 据传说,亚当是上帝创世第六天,根据自己的模样造出的第一个人,让亚当生活在伊甸园中,由于资源非常丰富,人闲就会是非多,终于有一天亚当感觉实在太TM寂寞了,于是央求上帝在造个人出来,上帝由于太过疼爱亚当...亚当和夏娃非常的恩爱,但是不论在什么的样的场景下,所有的自由都是收到约束的,比如上帝就不允许他们去吃伊甸园里面的两颗苹果树上的苹果!...但是需求总是变化的,伊甸园生活的一挑毒蛇sadan,诱惑夏娃说这两棵苹果树分别是智慧之树和生命之树,吃了可以和上帝一样聪明和长寿。
0.0B->2048.0K Heap:12.6M(252.0M)->7848.3K(252.0M)] — 这里显示了堆的大小变化: Eden: 12.0M(12.0M)->0.0B(14.0M) — 表示伊甸园...在 GC 发生之后,年轻代(young generation)空间下降到0,伊甸园的空间增长到 14mb,但是没有提交。因为要求,额外的空间被添加给伊甸园。...Metaspace: 2776K->2776K(1056768K)] – 这里显示了堆的大小变化,由于这是 Full GC 事件: Eden: 3072.0K(194.0M)->0.0B(201.0M) - 表示伊甸园空间...伊甸园空间增长到201mb,但是没有提交。因为要求,额外的空间被添加给伊甸园。 Survivors: 0.0B->0.0B – 表示 GC 发生前后,幸存者空间是 0kb。
我们将新生代分为三个部分:伊甸园区和两个 survivor 区。 伊甸园区,即对象诞生的地方,存放所有新生的对象,与在西方中我们人类诞生的地方——伊甸园想对应。...4.5、 Copying(拷贝)算法在年轻代中的具体应用 第一次垃圾回收:首先将 10% 的幸存对象拷贝到第一个 survivor 中,即 s0 中,然后将整个伊甸园区进行清除。...如下图所示: 第二次垃圾回收:将伊甸园区中有用的对象拷贝到另一个 survivor 中,即 s1 中,再将之前 s0 中的对象(前提是有用)拷贝到 s1 中,对伊甸园区与第一个 s0 进行垃圾回收。...如下图所示: 第三次垃圾回收:再次利用 s0,将之前存活的对象与伊甸园区中产生的新对象存放在 s0 中,对伊甸园区与 s1 进行二垃圾回收。...如下图所示: 第 n 次垃圾回收:如此循环往复利用新生代中的伊甸园区与 survivor 区即可。
详细过程是: 新生代的伊甸园区对象如果满了,就会触发 YGC,YGC 后还存活的对象,就会进入 from 区,同时清空伊甸园区; 伊甸园区经过一次 YGC 又满了时,会再次触发 YGC,会对伊甸园区和...from 区都进行垃圾回收; 经过这里两次 YGC 还存活的对象,就会复制到 to 区,对象年龄加一,然后清空伊甸园区和 from 区,此时 from 区和 to 区身份互换,谁空谁是 to; 当对象年龄达到阈值
开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux...新生代(Young generation)用来保存那些第一次被创建的对象,它被分成三个空间: 一个伊甸园空间(Eden) 两个幸存者空间(From Survivor、To Survivor) 默认新生代空间的分配...:Eden : From : To =8 : 1 : 1 每个空间的执行说明如下: 绝大多数刚刚被创建的对象会存放在伊甸园空间(Eden)。...绝大多数刚刚被创建的对象会存放在伊甸园空间(Eden)。 在伊甸园空间执行第一次GC(Minor GC)之后,存活的对象被移动到其中一个幸存者空间(Survivor)。...此后,每次伊甸园空间执行GC后,存活的对象会被堆积在同一个幸存者空间。 当一个幸存者空间饱和,还在存活的对象会被移动到另一个幸存者空间。
S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC :年轻代中Eden(伊甸园...中当前的容量 (字节) S0C :年轻代中第一个survivor(幸存区)的容量 (字节) S1C : 年轻代中第二个survivor(幸存区)的容量 (字节) EC :年轻代中Eden(伊甸园...目前已使用空间 (字节) S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (字节) TT:持有次数限制 MTT:最大持有次数限制 DSS:期望的幸存区大小 EC:年轻代中Eden(伊甸园...)的容量 (字节) EU :年轻代中Eden(伊甸园)目前已使用空间 (字节) YGC :从应用程序启动到采样时年轻代中gc次数 YGCT:从应用程序启动到采样时年轻代中gc所用时间(s) 示例七: -...)的最大容量 (字节) EC:年轻代中Eden(伊甸园)的容量 (字节) YGC:从应用程序启动到采样时年轻代中gc次数 FGC:从应用程序启动到采样时old代(全gc)gc次数 示例八: -gcold
(幸存区)的容量 (字节) S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC 年轻代中Eden(伊甸园...)的容量 (字节) EU 年轻代中Eden(伊甸园)目前已使用空间 (字节) OC Old代的容量 (字节) OU Old代目前已使用空间 (字节) PC Perm(持久代)的容量 (字节) PU Perm...年轻代(young)中当前的容量 (字节) S0C 年轻代中第一个survivor(幸存区)的容量 (字节) S1C 年轻代中第二个survivor(幸存区)的容量 (字节) EC 年轻代中Eden(伊甸园...统计gc信息 显示列名 具体描述 S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 E 年轻代中Eden(伊甸园...)的容量 (字节) EU 年轻代中Eden(伊甸园)目前已使用空间 (字节) YGC 从应用程序启动到采样时年轻代中gc次数 YGCT 从应用程序启动到采样时年轻代中gc所用时间(s) 7、jstat
领取专属 10元无门槛券
手把手带您无忧上云