性能问答>一次FullGC,避免新生代(Eden+Survivor)的内容全部放到老年代>
5回复

一次FullGC,避免新生代(Eden+Survivor)的内容全部放到老年代



发生一次FullGC,避免新生代(Eden+Survivor)的内容全部放到老年代。这种情况可以避免吗,我觉得ygc之后 即使Survivor放不下,也可以承担一些吧。求解惑

{Heap before GC invocations=619 (full 8): par new generation   total 3263424K, used 3086970K [0x0000000680400000, 0x000000075d900000, 0x000000075d900000)  eden space 2900864K, 100% used [0x0000000680400000, 0x00000007314e0000, 0x00000007314e0000)  from space 362560K,  51% used [0x00000007476f0000, 0x0000000752cae980, 0x000000075d900000)  to   space 362560K,   0% used [0x00000007314e0000, 0x00000007314e0000, 0x00000007476f0000) concurrent mark-sweep generation total 1612800K, used 961309K [0x000000075d900000, 0x00000007c0000000, 0x00000007c0000000) Metaspace       used 210744K, capacity 222745K, committed 222808K, reserved 1249280K  class space    used 20218K, capacity 22236K, committed 22268K, reserved 1048576K
2019-11-13T03:36:46.611+0800: 14568.064: [GC (Allocation Failure) 14568.064: [ParNew (promotion failed): 3086970K->3081843K(3263424K), 0.4982995 secs]14568.562: [CMS: 961884K->215158K(1612800K), 1.1328686 secs] 4048279K->215158K(4876224K), [Metaspace: 210744K->210744K(1249280K)], 1.6315216 secs] [Times: user=1.67 sys=0.03, real=1.64 secs]
Heap after GC invocations=620 (full 9)Connection Reset By Peer
 par new generation   total 3263424K, used 0K [0x0000000680400000, 0x000000075d900000, 0x000000075d900000)
  eden space 2900864K,   0% used [0x0000000680400000, 0x0000000680400000, 0x00000007314e0000)
  from space 362560K,   0% used [0x00000007314e0000, 0x00000007314e0000, 0x00000007476f0000)
  to   space 362560K,   0% used [0x00000007476f0000, 0x00000007476f0000, 0x000000075d900000)
 concurrent mark-sweep generation total 1612800K, used 215158K [0x000000075d900000, 0x00000007c0000000, 0x00000007c0000000)
 Metaspace       used 210701K, capacity 222685K, committed 222808K, reserved 1249280K
  class space    used 20213K, capacity 22226K, committed 22268K, reserved 1048576K
}
4467 阅读
请先登录,再评论

过程是从Eden和from space扫描 ,并依次拷贝到to space,如果to space满了再放到old,当然Eden里的可能会引用到from space的,因此并不表示在from space里的一定是在Eden里的对象之后被拷贝

22年前
回复 LetUsJava:

厉害了 哥。

2年前回复
回复 纳兹莫第:

因为是Full GC,所以会直接进行压缩,将新生代里活的对象拷贝到老生代

2年前回复
回复 你假笨:

从日志来看是Eden from to的占用都降到0%了。按理说应该是to 占100%

2年前回复

一般不会出现这种情况,因为一般先拷贝eden里的到to space,而Eden里的都是新创建的,所以至少有一块survivor是会被占用的

22年前