2012-02-22 2 views
4

개체 풀, 캐쉬 된 JPanels ... 등과 같은 많은 캐시가있는 Java 데스크톱 응용 프로그램을 개발하고 있습니다.Java로 캐시 된 객체를 해제하는 것이 좋은 시점은 언제입니까?

예 : 사용자가 한 패널에서 다른 패널로 전환하면 사용자가 다시 전환 할 때 이전 패널을 파괴하지 않습니다. 시스템이 내가 하지 때문에 정당을 소모하고 이러한 메모리 자원을 절실히 필요로하는 동안 응용 프로그램 메모리 소비가 높은 얻을 수 있습니다

하지만 ... 아이폰 OS 응용 프로그램에서

, 나는 이러한 릴리스 것 "applicationDidReceiveMemoryWarning"메소드. 하지만 자바에서는 ...?

Java에서 캐시 된 객체를 언제 릴리스 할 수 있습니까?

답변

7

캐싱은 종종 Java에서 좋은 생각이 아닙니다. 새 객체를 만드는 것이 일반적으로 생각보다 훨씬 저렴하며 "대문자와 같이"캐시 된 객체를 유지하는 것보다 더 나은 성능을 제공하는 경우가 많습니다. 오래 살아있는 많은 물체를 가지고 있으면 GC 성능에 좋지 않으며 프로세서 캐시에 상당한 부담을 줄 수 있습니다.

예를 들어 JPanels는 충분히 가볍기 때문에 필요할 때마다 완전히 새로운 것을 만들 수 있습니다.

내가 당신이라면, 가능한 한 작은 캐시 것, 당신은했습니다 경우에만 그렇게 그렇게에서 상당한 성능 향상 입증했다.

캐시해야하는 경우에도 Soft References을 사용하는 캐시를 사용하는 것이 좋습니다. 이렇게하면 메모리를 비워야하는 경우 JVM이 캐시에서 항목을 자동으로 지울 수 있습니다. 이것은 자신의 캐싱 전략을 시도하는 것보다 간단하고 안전합니다. Guava의 CacheBuilder과 같은 기존 Soft Reference 캐시 구현을 사용할 수 있습니다 (감사합니다 AlistairIsrael!).

+0

글쎄 - 나는 '방해하지 마라'대신 WeakReference를 사용한다. –

+0

와우. 나는 그 전에는 몰랐다. 나는 약간 검색했고 매우 유용하다는 것을 알았다. 조금 오래되었지만 멋진 기사 : http://weblogs.java.net/blog/2006/05/04/understanding-weak-references – Mazyod

+0

+1 소프트 참조를 언급합니다. – casablanca

관련 문제