2012-01-12 9 views
9
  1. 으로 Ehcache 내가 요소가 마지막 요소 사용 후 유휴
  2. 30 분되는 삼십분 후에 퇴거 할 것으로 예상 2.5
  3. timeToIdleSeconds = "1800"(30 분), 난 아직도 않습니다) (예상 (getKeys으로 키를 반환) 요소가 메모리
  4. 의 getSize() 양수 및 getKeys을 (반환 여전히 것을, 캐쉬 요소
  5. GC를 강제하고 힙 덤프 쇼를 복용 가득 볼 수 있습니다 요소 확인 만료 없음)
  6. 특정 요소를 가져 오는 중, NULL 값이 반환되지만 만료되었습니다.
  7. getKeysWithExpiryCheck() 프로그램, 그 캐시가 비어 모든 요소 및 요소 exired 메모리에서 수집 된, GC 강제 힙 덤프 방송 복용
  8. 축출. 내가 그들을 새로 내 코드 로직을 이끌 수있는 요소가 만료되어, 인상을 EHCache는하지만 특정 요소 또는 getKeysWithExpiryCheck를 호출 할 때까지 후드 메모리에서까지 요소로 오염되는 참조 위에서으로 Ehcache는 퇴거에 메모리에서 요소를 제거하지 않습니다

    maxEntriesLocalHeap="10000" 
    eternal="false" 
    statistics="true" 
    overflowToDisk="false" 
    timeToIdleSeconds="1800" 
    memoryStoreEvictionPolicy="LFU" 
    transactionalMode="off" 
    

(), 효과적인 메모리 관리자로 ehcache를 사용할 수 없게합니다.

timeToIdleSeconds 시간 후에 요소를 GS로 만드는 방법은 무엇입니까? 요소가 timeToIdleSeconds보다 위에 사용되지 않으면 메모리를 정리하고 싶습니다.

요소를 넣어 때 마이클

답변

18

으로 Ehcache 요소에만 퇴거하고 캐시 임계 값 이상입니다. 그렇지 않으면 만료 된 요소에 액세스하면 해당 요소가 만료되어 캐시에서 제거됩니다. 백그라운드에서 캐시에서 만료 된 요소를 수집하고 제거하는 스레드가 없습니다. 이것이 캐시의 성능에 영향을 미치기 때문에 (비록 메모리 사용이 더 중요하다면 이것은 공정한 트레이드 오프가 될 것입니다.), 정기적 인 간격으로 getKeysWithExpiryCheck()를 수행하는 백그라운드 스레드를 가질 수 있습니다.

또한 메모리 사용량이 중요한 경우 새로운 Ehcache 2.5를 살펴 보는 것이 좋습니다. CacheManager 수준에서도 힙 사용량을 지정할 수 있습니다.

관련 문제