163

Why always "GC (Allocation Failure)"?

Java HotSpot(TM) 64-Bit Server VM (25.25-b02) for linux-amd64 JRE (1.8.0_25-b17),

CommandLine flags: 
-XX:CMSInitiatingOccupancyFraction=60 
-XX:GCLogFileSize=10485760 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:InitialHeapSize=32212254720 
-XX:MaxHeapSize=32212254720 
-XX:NewRatio=10 
-XX:OldPLABSize=16 
-XX:ParallelGCThreads=4 
-XX:+PrintGC 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+PrintStringTableStatistics 
-XX:+PrintTenuringDistribution 
-XX:StringTableSize=1000003 
-XX:SurvivorRatio=4 
-XX:TargetSurvivorRatio=50 
-XX:+UseCompressedClassPointers 
-XX:+UseCompressedOops
-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC
27.329: [GC (Allocation Failure) 27.329: [ParNew
Desired survivor size 44728320 bytes, new threshold 15 (max 15)
- age   1:   16885304 bytes,   16885304 total
: 349568K->16618K(436928K), 0.2069129 secs] 349568K->16618K(31369920K), 0.2070712 secs] [Times: user=0.78 sys=0.04, real=0.21 secs]


28.210: [GC (Allocation Failure) 28.210: [ParNew
Desired survivor size 44728320 bytes, new threshold 15 (max 15)
- age   1:   28866504 bytes,   28866504 total
- age   2:   12582536 bytes,   41449040 total
: 366186K->47987K(436928K), 0.2144807 secs] 366186K->47987K(31369920K), 0.2146024 secs] [Times: user=0.84 sys=0.01, real=0.22 secs]


29.037: [GC (Allocation Failure) 29.038: [ParNew
Desired survivor size 44728320 bytes, new threshold 2 (max 15)
- age   1:   28443488 bytes,   28443488 total
- age   2:   28386624 bytes,   56830112 total
- age   3:   12579928 bytes,   69410040 total
: 397555K->76018K(436928K), 0.2357352 secs] 397555K->76018K(31369920K), 0.2358535 secs] [Times: user=0.93 sys=0.01, real=0.23 secs]

4 Answers 4

242

"Allocation Failure" is a cause of GC cycle to kick in.

"Allocation Failure" means that no more space left in Eden to allocate object. So, it is normal cause of young GC.

Older JVM were not printing GC cause for minor GC cycles.

"Allocation Failure" is almost only possible cause for minor GC. Another reason for minor GC to kick could be CMS remark phase (if +XX:+ScavengeBeforeRemark is enabled).

9
  • 5
    I do not get this answer fully, so is to be avoided or not? "it is normal cause of young GC". Is the young GC the wrong choice then?
    – Thomas
    Oct 28, 2016 at 20:11
  • 8
    Yes, this is normal behaviour Oct 29, 2016 at 14:01
  • 268
    GC (Allocation Failure) is a poor choice of words for an event that will occur normally many times a day. Those JVM engineers should go out more often and try to socialize in the real world so they can learn more friendly terms that people understand. Feb 16, 2017 at 20:29
  • 135
    @SalvadorValencia It's okay, people who read GC logs on a regular basis aren't exactly "normal" either. :)
    – biziclop
    Jul 11, 2017 at 14:37
  • 9
    @SalvadorValencia , believe it or not. If they could socialize they would have never touched GC. Jul 31, 2019 at 16:40
15

"Allocation Failure" is cause of GC to kick

is not correct. It is an outcome of GC operation.

GC kicks in when there is no space to allocate( depending on region minor or major GC is performed). Once GC is performed, if space is freed all is good, but if there is not enough contiguous space there is still an issue. This is reported as "Allocation failure". Below document have good explanation https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc.html

3
  • 2
    "(...) then an allocation failure occurs (because there is no space to allocate the live objects from the region being evacuated) and a stop-the-world (STW) full collection is done." - In java 1.8, server mode, I have reproduced a brief pause and both of these traces are printed together: [GC (Allocation Failure) 2287742K->1148645K(2633216K), 0.4571912 secs] [Full GC (Ergonomics) 1148645K->1112141K(3184128K), 2.8563984 secs]. So I upvote your answer ;-) Jun 6, 2019 at 17:58
  • So this message comes up because there is no enough space in the old generation or the new generation? Oct 9, 2022 at 14:22
  • I'm not sure, but I think both answers are true - looks to me like what you are talking about is a Full GC (Allocation Failure), and what the other answer is referring to is a GC (Allocation Failure) (notice the Full in the first one). Couldn't find any solid references to this, so if someone can that would be amazing.
    – Aldahunter
    Jun 11, 2023 at 17:50
0

You can see these noises, if this flag is enabled, part of _JAVA_OPTOIONS.

 -XX:+PrintGCDetails
-6

When use CMS GC in jdk1.8 will appeare this error, i change the G1 Gc solve this problem.

 -Xss512k -Xms6g -Xmx6g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=70 -XX:NewRatio=1 -XX:SurvivorRatio=6 -XX:G1ReservePercent=10 -XX:G1HeapRegionSize=32m -XX:ConcGCThreads=6 -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 
3
  • 4
    Why was this voted down so many times? An explanation would be useful. Nov 28, 2019 at 18:06
  • 3
    Because it's like say that you rewrote your program in Rust and now you don't have such messages?
    – simplylizz
    Feb 12, 2020 at 11:10
  • 1
    Because it is not a problem and you didn't solve it.
    – Stephen C
    Jan 26, 2023 at 11:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.