java.lang.OutOfMemoryError를 포착합니까?
Java 문서에서는 java.lang.OutOfMemoryError를 포함한 java.lang.Error를 포착하지 말라고 조언합니다. 그러나 그렇게 하는 것이 정당할 수 있는 상황도 있습니다.
OutOfMemoryError를 잡아야 하는 경우
정상 종료, 리소스 해제 및 실패 원인 기록을 위해서만 OutOfMemoryError를 잡는 것을 고려하십시오. 힙 자원이 부족하여 블록 메모리 할당에 실패할 때 발생합니다. 그러나 힙에는 여전히 할당된 개체가 포함되어 있습니다. 런타임 객체에 대한 참조를 삭제하면 정리를 위해 더 많은 메모리를 확보할 수 있습니다.
Catch 핸들러에서 메모리 할당 방지
Catch 핸들러에서 추가 메모리 할당을 방지하려면 다음을 고려하세요. :
예제 코드
다음 코드는 OutOfMemoryError를 포착하고 정리를 위해 메모리를 해제하는 방법을 보여줍니다.
import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; public class OutOfMemoryErrorHandling { private static final int MEGABYTE = (1024 * 1024); public static void main(String[] args) { MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean(); for (int i = 1; i <= 100; i++) { try { byte[] bytes = new byte[MEGABYTE * 500]; } catch (OutOfMemoryError e) { // Cleanup operations: // Drop references to runtime objects // Release external resources (e.g., logging) MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage(); long maxMemory = heapUsage.getMax() / MEGABYTE; long usedMemory = heapUsage.getUsed() / MEGABYTE; System.out.println(i + " : Memory Use :" + usedMemory + "M/" + maxMemory + "M"); } } } }
결론
잡기 OutOfMemoryError는 매우 주의해서 접근해야 하며, 정상적인 종료를 촉진하기 위해서만 접근해야 합니다. catch 핸들러에서 메모리 할당을 주의 깊게 관리하면 추가 메모리 문제를 방지하고 JVM이 종료되기 전에 적절하게 정리할 수 있습니다.
위 내용은 언제 Java OutOfMemoryError를 발견해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!