티스토리 뷰

자바개발을 하다보면 어떤 이유에서든 Out of Memory 예외를 만나는 경우가 있습니다. 

하지만 사용자 코드로 임의로 발생 시키고 싶을때도 있죠.

이하 JDK 1.6 기준 메모리 유형별 Out of Memory 를 발생 시키는 코드 입니다. (JVM 메모리 영역에 대한 설명은 생략)


1.PermGen

1
2
3
4
5
6
7
8
9
10
11
12
public class OomTest {
    public static void main(String[] args) {
        List<String> nogc = new ArrayList<String>();
        while (true) {
            StringBuilder a = new StringBuilder();
            for (int i = 0; i < 1000; i++) {
                a.append(UUID.randomUUID().toString());
            }
            nogc.add(a.toString().intern());
        }
    }
}

cs


결과

Exception in thread "main" java.lang.OutOfMemoryError: PermGen space

at java.lang.String.intern(Native Method)

at OomTest.main(OomTest.java:13)


2.Heap

1
2
3
4
5
public class OomTest {
    public static void main(String[] args) {
        new ArrayList(Integer.MAX_VALUE);
    }
}
cs

결과

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

at java.util.ArrayList.<init>(ArrayList.java:112)

at OomTest.main(OomTest.java:7)


3.Stack

1
2
3
4
5
6
7
8
public class OomTest {
    private static void stackOom() {
        stackOom();
    }
    public static void main(String[] args) {
        OomTest.stackOom();;
    }
}
cs

결과

Exception in thread "main" java.lang.StackOverflowError

at OomTest.stackOom(OomTest.java:7)

at OomTest.stackOom(OomTest.java:7)

at OomTest.stackOom(OomTest.java:7)

at OomTest.stackOom(OomTest.java:7)



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크