Java - 강제로 OutOfMemoryError 발생시키기

테스트 목적으로, 강제로 OutOfMemoryError 발생시키는 코드를 소개합니다.

Example 1

큰 크기의 배열 생성 및 리스트에 저장하여 메모리를 지속적으로 사용합니다. 메모리가 부족할 때 OutOfMemoryError가 발생됩니다.

import java.util.ArrayList;
import java.util.List;

class SimulateOutOfMemory {

    public static void main(String[] args) {

        List<byte[]> list = new ArrayList<>();
        int index = 1;

        while (true) {
            // 1MB each loop, 1 x 1024 x 1024 = 1048576
            byte[] b = new byte[1048576];
            list.add(b);
            Runtime rt = Runtime.getRuntime();
            System.out.printf("[%d] free memory: %s%n", index++, rt.freeMemory());
        }

    }
}

Output:

[1] free memory: 396776112
....
[4489] free memory: 1573724720
[4490] free memory: 1573724720
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at SimulateOutOfMemory.main(SimulateOutOfMemory.java:13)

Example 2

import java.util.ArrayList;

class SimulateOutOfMemory {

    public static void main(String[] args) {
        new ArrayList(Integer.MAX_VALUE);
    }
}

Output:

Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
	at java.base/java.util.ArrayList.<init>(ArrayList.java:156)
	at SimulateOutOfMemory.main(SimulateOutOfMemory.java:7)

References

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha