首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏山海散人技术

    004. 深入JVM学习—Java垃圾回收流程

    当有一个新对象产生,需要分配空间; 首先会判断伊甸园区是否有内存空间,如果有内存空间,则直接将新对象保存在伊甸园区; 如果伊甸园区内存空间不足,会自动执行Minor GC操作,将伊甸园区无用的内存空间进行清理 ;清理之后会判断伊甸园区的内存空间是否充足? 如果内存空间充足则将新的对象在伊甸园区进行分配; 如果执行了Minor GC操作,发现伊甸园区内存依然不足,那么会判断存活区,如果存活区有内存空间,那么会把伊甸园区的部分活跃对象保存到存活区,随后继续判断伊甸园区的空间是否充足 ,如果充足,则在伊甸园区进行新对象内存空间的分配; 如果此时存活区也已没有内存空间,那么判断老年区,如果此时老年区空间充足,则将存活区中的活跃对象保存到老年区,而后存活区就会出现空余空间,而后伊甸园区将活跃对象保存在存活区之中 ,而后在伊甸园区中为新对象开辟空间; 如果此时老年代也是满的,此时将产生Major GC(Full GC),进行老年代的内存清理; 如果老年代执行了Full GC之后,发现依然无法实现对象的保存

    56310发布于 2021-03-03
  • 来自专栏九州牧云

    浅谈 G1 GC 日志格式

    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,但是没有提交。因为要求,额外的空间被添加给伊甸园6、Times: user=0.08, sys=0.00, real=0.02 secs – 注意这里的 real 时间,它表示 GC 总共花了 0.02 秒,如果你对 user 和 sys 感兴趣,请查看这篇文章 Metaspace: 2776K->2776K(1056768K)] – 这里显示了堆的大小变化,由于这是 Full GC 事件: Eden: 3072.0K(194.0M)->0.0B(201.0M) - 表示伊甸园空间 伊甸园空间增长到201mb,但是没有提交。因为要求,额外的空间被添加给伊甸园。 Survivors: 0.0B->0.0B – 表示 GC 发生前后,幸存者空间是 0kb。

    3.1K40发布于 2019-08-21
  • 来自专栏java一日一条

    成为JavaGC专家(1)—深入浅出Java垃圾回收机制

    每个空间的执行顺序如下: 绝大多数刚刚被创建的对象会存放在伊甸园空间。 在伊甸园空间执行了第一次GC之后,存活的对象被移动到其中一个幸存者空间。 Bump-the-pointer技术跟踪在伊甸园空间创建的最后一个对象。这个对象会被放在伊甸园空间的顶部。如果之后再需要创建对象,只需要检查伊甸园空间是否有足够的剩余空间。 图 6: G1 GC的结构 如果你想要理解G1,首先你要忘记你所学过的新生代和老年代的概念。正如你在上图所看到的,每个对象被分配到不同的格子,随后GC执行。 但是在JDK 6中,他还只是一个早期试用版本。在JDK7之后才由官方正式发布。就我个人看来,NHN在将JDK 7正式投入商用之前需要很长的一段测试期(至少一年)。因此你可能需要再等一段时间。 并且,我也听过几次使用了JDK 6中的G1而导致Java虚拟机宕机的事件。请耐心的等到它更稳定吧。

    63320发布于 2018-09-18
  • 来自专栏JavaEE

    java面试题 --- JVM之垃圾回收

    6. 确定一个对象是要被回收的,那接下来如何怎么处理? 会加入到回收队列中,然后 Finalizer 线程会触发该对象的 finalize 方法对其进行回收。 详细过程是: 新生代的伊甸园区对象如果满了,就会触发 YGC,YGC 后还存活的对象,就会进入 from 区,同时清空伊甸园区; 伊甸园区经过一次 YGC 又满了时,会再次触发 YGC,会对伊甸园区和 from 区都进行垃圾回收; 经过这里两次 YGC 还存活的对象,就会复制到 to 区,对象年龄加一,然后清空伊甸园区和 from 区,此时 from 区和 to 区身份互换,谁空谁是 to; 当对象年龄达到阈值

    44810编辑于 2022-03-09
  • 来自专栏分享干货的你

    jvm 教程动画版

    我们看到年轻代分为伊甸园区,幸存者0区,幸存者1 区。 这时候我们看一下代码中jjvm 的配置 最大对象包括年轻代和老年代=300, 幸存者和伊甸园的比例是1:8, 老年代和年轻代的比例是1:2 由此我们可以得出 伊甸园80 幸存者0:10 幸存者 1:10 老年代:200 从图上伊甸园的格子8X10 我们也能看出和我们的猜想是一样的。 首先伊甸园的格子数值是对象的编号,下面幸存者0 和1区的 格子里面有两个数值,第二个是年龄。也就是被回收一次,年龄加一,超过最大年龄就送到老年代。 默认是15 ,现在是3. 一个伊甸园区加上幸存者区, 但是这个需要老年代的分配担保。 要是伊甸园区不够,全部进入老年代就直接引发fullgc .

    40520编辑于 2022-09-22
  • 来自专栏Java EE 企业级开发工作日志

    JVM 调优 2:GC 如何判断对象是否为垃圾,三色标记算法应用原理及存在的问题?

    如果进行调整之后所使用的 GC 是 CMS,那 age 就是 6。 如果使用的 GC 是 G1 的话,则就彻底与 age 无关,因为该 GC 不分代。 我们将新生代分为三个部分:伊甸园区和两个 survivor 区。 伊甸园区,即对象诞生的地方,存放所有新生的对象,与在西方中我们人类诞生的地方——伊甸园想对应。 如下图所示: 第二次垃圾回收:将伊甸园区中有用的对象拷贝到另一个 survivor 中,即 s1 中,再将之前 s0 中的对象(前提是有用)拷贝到 s1 中,对伊甸园区与第一个 s0 进行垃圾回收 如下图所示: 第三次垃圾回收:再次利用 s0,将之前存活的对象与伊甸园区中产生的新对象存放在 s0 中,对伊甸园区与 s1 进行二垃圾回收。 如下图所示: 第 n 次垃圾回收:如此循环往复利用新生代中的伊甸园区与 survivor 区即可。

    73840编辑于 2022-05-08
  • 来自专栏猫头虎博客专区

    jstat命令查看jvm的GC情况 (以Linux为例)

    失败类型 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

    2.4K10编辑于 2024-04-07
  • 来自专栏Utopia

    图解对象分配过程

    new的对象先放伊甸园区。此区有大小限制。 当伊甸园的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(MinorGC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。 再加载新的对象放到伊甸园区。 然后将伊甸园中的剩余对象移动到幸存者0区。 如果再次触发垃圾回收,此时将伊甸园区和幸存者0区进行垃圾回收,剩下的对象就会放到幸存者1区。 (InterruptedException e) { e.printStackTrace(); } } } } 注意【伊甸园

    42830编辑于 2023-03-21
  • 来自专栏java闲聊

    Jstat命令详解-1.8

    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

    2.7K30发布于 2018-07-13
  • 来自专栏Redis

    【 java 虚拟机知识 第一篇 】

    ,而幸存者区又平均分为S0和S1区,伊甸园区与S0与S1之间的比例:8:1:1,每次新创建的对象实例都会先存入伊甸园区,它们主要使用的垃圾回收算法是复制算法,当伊甸园区的内存使用完时,会使用可达性分析算法 ,标记不可存活的对象(没有被引用的对象)将存活对象复制移入S0或S1中,这个过程叫Minor GC,如果这次移入的是S0,那么下次就会将伊甸园区和S0中的对象移入S1中,循环反复,每经历一次Minor GC过程就会给对象年龄加一,直到大于等于15时,会认为该对象生命周期长,移入老年代中 细节:其实新创建的对象不会直接存入伊甸园区,如果多线程情况下同时进行存入对象(线程竞争压力大)会导致性能的损失,因此会给每个线程从伊甸园区中先申请一块 queue.poll() = null GC后: softRef.get() = null queue.poll() = java.lang.ref.SoftReference@6d06d69c System.out.println(" queue.poll() = " + queue.poll()); // 返回phantomRef对象 // 6.

    24910编辑于 2025-06-10
  • 来自专栏blog-技术博客

    JVM进阶

    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

    49121发布于 2020-09-18
  • 来自专栏全栈程序员必看

    jstat命令详解[通俗易懂]

    (幸存区)的容量 (字节) S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC 年轻代中Eden(伊甸园 )的容量 (字节) EU 年轻代中Eden(伊甸园)目前已使用空间 (字节) OC Old代的容量 (字节) OU Old代目前已使用空间 (字节) PC Perm(持久代)的容量 (字节) PU Perm 年轻代(young)中当前的容量 (字节) S0C 年轻代中第一个survivor(幸存区)的容量 (字节) S1C 年轻代中第二个survivor(幸存区)的容量 (字节) EC 年轻代中Eden(伊甸园 gc所用时间(s) FGC 从应用程序启动到采样时old代(全gc)gc次数 FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s) GCT 从应用程序启动到采样时gc用的总时间(s) 6、 )的容量 (字节) EU 年轻代中Eden(伊甸园)目前已使用空间 (字节) YGC 从应用程序启动到采样时年轻代中gc次数 YGCT 从应用程序启动到采样时年轻代中gc所用时间(s) 7、jstat

    4.1K40编辑于 2022-10-01
  • 来自专栏Java EE 企业级开发工作日志

    JVM 调优系列 2:GC 如何判断对象是否为垃圾,三色标记算法应用原理及存在的问题

    如果进行调整之后所使用的 GC 是 CMS,那 age 就是 6。 如果使用的 GC 是 G1 的话,则就彻底与 age 无关,因为该 GC 不分代。 我们将新生代分为三个部分:伊甸园区和两个 survivor 区。 伊甸园区,即对象诞生的地方,存放所有新生的对象,与在西方中我们人类诞生的地方——伊甸园想对应。 如下图所示: 第二次垃圾回收:将伊甸园区中有用的对象拷贝到另一个 survivor 中,即 s1 中,再将之前 s0 中的对象(前提是有用)拷贝到 s1 中,对伊甸园区与第一个 s0 进行垃圾回收。 如下图所示: 第三次垃圾回收:再次利用 s0,将之前存活的对象与伊甸园区中产生的新对象存放在 s0 中,对伊甸园区与 s1 进行二垃圾回收。 如下图所示: 第 n 次垃圾回收:如此循环往复利用新生代中的伊甸园区与 survivor 区即可。

    98811发布于 2021-03-21
  • 来自专栏小勇DW3

    服务器端使用jstat定位GC问题的有关命令

    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:老年代回收次数   老年代垃圾回收统计 ?

    1.4K30发布于 2018-09-29
  • 来自专栏凯哥Java

    JVM笔记五-堆区

    新生区又分为两部分:伊甸园区(Eden space)和幸存者区(Survivor space)。所有的类都是在伊甸园区被new出来的。 当伊甸园区的空间用完时候,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC,也叫轻GC 或者是YGC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。 然后伊甸园中的剩余对象移动到幸存0区(也叫from区)。若幸存0区也满了,再对该地区进行垃圾回收,然后移动到1区(也叫to区)。 如果1区也满了怎么办呢?

    63533发布于 2020-10-11
  • 来自专栏技术趋势

    JVM-jstat(虚拟机统计信息监视工具)的使用

    打印出指定线程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 当前伊甸园区大小

    77620发布于 2021-09-17
  • 来自专栏九州牧云

    Java命令学习系列(四)——jstat

    (幸存区)的容量 (字节) S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC 年轻代中Eden(伊甸园 )的容量 (字节) EU 年轻代中Eden(伊甸园)目前已使用空间 (字节) OC Old代的容量 (字节) OU Old代目前已使用空间 (字节) PC Perm(持久代)的容量 (字节) PU Perm 年轻代(young)中当前的容量 (字节) S0C 年轻代中第一个survivor(幸存区)的容量 (字节) S1C 年轻代中第二个survivor(幸存区)的容量 (字节) EC 年轻代中Eden(伊甸园 gc所用时间(s)FGC 从应用程序启动到采样时old代(全gc)gc次数 FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s) GCT 从应用程序启动到采样时gc用的总时间(s) 6、 )的容量 (字节) EU 年轻代中Eden(伊甸园)目前已使用空间 (字节) YGC 从应用程序启动到采样时年轻代中gc次数 YGCT 从应用程序启动到采样时年轻代中gc所用时间(s) 7、jstat

    63030发布于 2019-08-21
  • 来自专栏博客分享

    面试专题-虚拟机篇

    eden,最初对象都分配到这里,与幸存区 survivor(分成 from 和 to)合称新生代, 当伊甸园内存不足,标记伊甸园与 from(现阶段没有)的存活对象 将存活对象采用复制算法复制到 to 中,复制完毕后,伊甸园和 from 内存都得到释放 将 from 和 to 交换位置 经过一段时间后伊甸园的内存又出现不足 标记伊甸园与 from(现阶段没有)的存活对象 将存活对象采用复制算法复制到 当伊甸园需要垃圾回收时,挑出一个空闲区域作为幸存区,用复制算法复制存活对象,需要暂停用户线程 复制完成,将之前的伊甸园内存释放 随着时间流逝,伊甸园的内存又有不足 将伊甸园以及之前幸存区中的存活对象 混合收集阶段中,参与复制的有 eden、survivor、old,下图显示了伊甸园和幸存区的存活对象复制 下图显示了老年代和幸存区晋升的存活对象的复制 复制完成,内存得到释放。 会抛安全异常,在 jdk9 以上版本这些特殊包名都与模块进行了绑定,更连编译都过不了 代码说明 day03.loader.TestJdk9ClassLoader - 演示类加载器与模块的绑定关系 6.

    56920编辑于 2022-11-10
  • 来自专栏北风IT之路

    JVM虚拟机性能监控与故障处理工具

    jinfo:Configuration Info for Java 4.jmap:Memory Map for Java 5.jhat:JVM Heap Analysis Tool 6. 每个字段说明: S0C:第一个幸存区的大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 OC:老年代大小 EU:伊甸园区的使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间 2.6 新生代内存 -gcnewcapacity 监视内容与-gcnew基本相同,主要输出使用到的最大、最小空间 EC:当前伊甸园区大小 YGC:年轻代垃圾回收次数 FGC:老年代回收次数 2.7 老年代垃圾回收 -gcold 监视老年代GC状况 ? 例如我要解析上面生成的dump文件可以用命令: jhat vote.dump 6.jstack:Stack Trace for Java Java堆栈跟踪工具,**用于生成虚拟机当前时刻的线程快照(一般称为

    1.1K20发布于 2019-06-03
  • 来自专栏全栈程序员必看

    jvm jstat_预处理命令是什么意思

    (幸存区)的容量 (字节) S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC 年轻代中Eden(伊甸园 )的容量 (字节) EU 年轻代中Eden(伊甸园)目前已使用空间 (字节) OC Old代的容量 (字节) OU Old代目前已使用空间 (字节) PC Perm(持久代)的容量 (字节) PU Perm 年轻代(young)中当前的容量 (字节) S0C 年轻代中第一个survivor(幸存区)的容量 (字节) S1C 年轻代中第二个survivor(幸存区)的容量 (字节) EC 年轻代中Eden(伊甸园 gc所用时间(s) FGC 从应用程序启动到采样时old代(全gc)gc次数 FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s) GCT 从应用程序启动到采样时gc用的总时间(s) 6、 )的容量 (字节) EU 年轻代中Eden(伊甸园)目前已使用空间 (字节) YGC 从应用程序启动到采样时年轻代中gc次数 YGCT 从应用程序启动到采样时年轻代中gc所用时间(s) 7、jstat

    72930编辑于 2022-10-01
领券