2013-04-08 7 views
1

최근 Java 인터뷰에서이 질문을 받았습니다. OutOfMemory 예외가 발생하면 OutOfMemory Exception을 던진 클래스와 메서드를 어떻게 찾을 수 있습니까? 나는 그것이 스택 추적으로 올 것이라고 대답했다. 그러나 그는 그것이 어떤 예외/클래스가 그 예외를 던져 왔는지를 알려주지 않을 것이라고 여러 차례 말했다. 나는 그가 도움이 될 수있는 도구 또는 JVM 인수를 기대하고 있다고 가정합니다. 하지만 나는 그것을 사용하지 못하여 대답 할 수 없었다.OutofMemory 예외 세부 사항

무한 루프에서 해시 맵에 값을 넣는 간단한 예제를 시도했습니다. 언젠가 OutOfMemory 오류가 발생하고 클래스/메서드 이름과 줄 번호가 표시됩니다. 나는 그것이 당신에게이 세부 사항 [method/classname]과 그것을 발견하는데 사용할 수있는 도구/VM 인수를주지 않는 시나리오가 무엇인지 알고 싶습니다.

**Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) 
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source) 
    at java.lang.AbstractStringBuilder.append(Unknown Source) 
    at java.lang.StringBuilder.append(Unknown Source) 
    at hashmapTest.main(hashmapTest.java:18)** 

나는이 VM 인수 Xms1024m -Xmx1024m -XX에 대해 읽고 : + HeapDumpOnOutOfMemoryError -XX : HeapDumpPath하지만 난 그게이 목적을 달성하기 위해 사용하는 경우 매우 확실하지 않다.

답변

0

Java에서 힙 공간이 부족한 경우 특정 객체가 자신의 객체 중 하나 인 경우 특정 객체가 예외를 throw하는 것을 볼 수는 있지만 내부 Java 객체가 될 수 있습니다. 이 경우 추적은별로 도움이되지 않습니다.

Xms 옵션은 허용되는 최대 힙 크기를 정의하며 Xms 옵션은 최소 힙 크기를 정의하므로 메모리 누출/오버 헤드 문제가 아닌 경우 문제를 해결해야합니다.

프로그램이 필요한 것보다 많은 메모리를 사용한다고 의심되면 메모리 사용을 추적 할 수있는 도구가 있습니다.