2010-06-26 4 views
5

메모리 부족이 발생하기 전에 Java에서 수행 할 작업이 있습니까? 예를 들어 이전 문서 상태 목록을 유지 (실행 취소)하고 메모리가 거의 고갈 될 때까지 아주 오래된 상태 만 제거하면됩니까?메모리가 부족하기 직전에 수행하십시오.

+0

가능한 복제 http://stackoverflow.com/questions/2679330/catching-java-lang-outofmemoryerror, http://stackoverflow.com/questions/1692230/is-it-possible-to-catch-out- of-memory-exception-in-java 및 http://stackoverflow.com/questions/3058198/can-the-jvm-recover-from-an-outofmemoryerror-without-a-restart – BalusC

+1

그들은 Oome 잡기에 관한 것입니다. 그것이 일어나는 것을 막는 것입니다. –

답변

2

예를 들어 이전 문서 상태 목록을 유지 (실행 취소)하고 메모리가 거의 고갈 될 때까지 아주 오래된 상태 만 제거하면됩니까?

SoftReference으로 무엇인가 할 수 있습니다. java.lang.ref 패키지에 대한 일반 문서를 참조하십시오. 객체가 SoftReference을 통해서만 접근 할 수 있다면 메모리 부족 오류가 발생하기 전에 가비지 수집됩니다. 그러나 VM이 이러한 이벤트 전에 이러한 참조를 유지하거나 어떤 순서로 삭제 될지에 대한 보증을하지 않아도됩니다. 일부 유형의 지속성과 결합하는 것이 가장 좋습니다.

1

네, 물론 가능합니다.

이전 문서 상태에 대해 SoftReference의 목록을 사용했을 것입니다. 이들은 메모리 부족 예외가 발생하기 전에 처리되도록 보장됩니다.

정기적 인 간격으로 목록에서 null 참조를 제거 할 수 있습니다.

당신은 항상 적어도 하나 :-) 취소 보장 할 수 있도록 나는 또한 가장 최근의 상태로 정상 참조를 유지하는 것이 좋습니다

그것은 JVM 구현에 따라 달라집니다,하지만 당신은 운이 좋은 경우 JVM 것이다 것 가장 최근의 주를 유지하고 가장 오래된 주를 처분하십시오. 이것은 JVM 스펙에서 꼭 필요한 것은 아니지만 권장되는 동작입니다.

관련 문제