GC Overhead Limit Exceeded
Hello. In this tutorial, we will understand the GC Overhead Limit Exceeded error in the Java programming language.
1. Introduction
Out of memory error in java is a virtual machine error thrown by the java virtual machine when the resources are exhausted. In other words, the error prevails when the virtual machine has spent hours performing the garbage collection but has reclaimed very little heap space. This error is thrown when the JVM spends 98% of the time performing garbage collection but only 2% of the heap space is recovered in each run.
2. Practice
Let us dive into some practice stuff from there and I am assuming that you already have the Java 1.8 or greater installed on your local machine. I am using JetBrains IntelliJ IDEA as my preferred IDE. You’re free to choose the IDE of your choice.
2.1 Setting up the pom
Create a java project and dd the following code to the pom file. Since this is a simple java application so we will not use any fancy dependencies and will simply set the java version property.
pom.xml
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <artifactId>garbagecollectionerror</artifactId> <groupId>com.learning</groupId> <modelVersion>4.0.0</modelVersion> <name>garbage-collection-error</name> <properties> <java.version>1.8</java.version> </properties> <version>0.0.1-SNAPSHOT</version> </project>
2.2 Creating the implementation class
Add the following code to the java class created in the com.learning
package under the src/main/java
folder. The code will keep adding the random names to a list in an unterminated loop.
GCError.java
package com.learning; import java.util.ArrayList; import java.util.List; import java.util.Random; public class GCError { static int count = 0; static Random random = new Random(); public static void main(String[] args) { List<String> names = new ArrayList<>(); while (true) { names.add("Random name" + random.nextInt()); System.out.println(count++); } } }
Run the file as a java file with the following command – java -Xmx100m -XX:+UseParallelGC GCError.java
. The logic will work infinitely to add the random name to the ArrayList and print the count on the console. Once the memory gets exhausted the below error will be thrown on the IDE console.
Console output
-- long output snipped for brevity … 79934 79935 79936 79937 79938 79939 79940 ... java.lang.OutOfMemoryError: GC Overhead Limit Exceeded error
2.3 Solving error
To solve the garbage collection error in a java program one must ensure that are fewer or minimum leaks in the system by –
- Identify the large objects in the code and mark them as null once the execution is done or they are not needed anymore
- Avoid creating temporary or weakly referenced objects in the java application code
- Increase the heap size for the java application to avoid the out-of-memory error e.g.
java -Xmx1024m com.learning.GCError.java
That is all for this tutorial and I hope the article served you with whatever you were looking for. Happy Learning and do not forget to share!
3. Summary
In this tutorial, we discussed the garbage collection in java and how to solve it. You can download the source code from the Downloads section.
4. Download the Project
This was a tutorial on GC overhead limit exceeded error in java programming.
You can download the full source code of this example here: GC Overhead Limit Exceeded