2012-01-12 25 views
9
  1. ehcache 2,5
  2. timeToIdleSeconds = "1800" (30 phút), vì vậy tôi hy vọng yếu tố để đuổi sau 30 phút là nhàn rỗi
  3. 30 phút sau khi sử dụng phần tử cuối cùng Tôi vẫn có thể thấy bộ nhớ cache có đầy đủ các thành phần
  4. Buộc GC và tham gia hiển thị kết xuất đống, các phần tử đó vẫn còn trong bộ nhớ
  5. getSize() trả về số dương và getKeys() trả về các khóa như mong đợi (getKeys() không kiểm tra các yếu tố hết hạn)
  6. nhận được phần tử cụ thể, mặc dù kết quả trong giá trị NULL, có nghĩa là nó đã hết hạn.
  7. getKeysWithExpiryCheck() hiển thị, bộ nhớ cache đó trống và tất cả các phần tử đã bị loại bỏ và bị loại bỏ
  8. Buộc GC và tham gia chương trình kết xuất đống, phần tử được thu thập hết bộ nhớ.ehcache không loại bỏ phần tử từ bộ nhớ trên đuổi

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

Từ trên tôi thấy, đó ehcache tạo ấn tượng, đó là yếu tố hết hạn có thể dẫn Logic mã của tôi để làm mới chúng, nhưng dưới sự nhớ mui xe được cho đến khi bị ô nhiễm với các yếu tố cho đến khi tôi gọi yếu tố cụ thể hoặc getKeysWithExpiryCheck(), điều này không cho phép tôi sử dụng ehcache như trình quản lý bộ nhớ hiệu quả

Làm thế nào để biến phần tử thành GS sau timeToIdleThứ hai giây? Tôi muốn bộ nhớ được làm sạch nếu các phần tử không được sử dụng ở trên timeToIdleSeconds.

Michael

Trả lời

18

Ehcache sẽ chỉ gỡ bỏ các yếu tố khi đưa các yếu tố và bộ nhớ cache của bạn vượt ngưỡng. Nếu không, việc truy cập vào các thành phần đã hết hạn đó sẽ dẫn đến việc chúng bị hết hạn (và bị xóa khỏi Cache). Không có chuỗi nào thu thập và xóa các phần tử đã hết hạn khỏi Cache trong nền. Mặc dù tôi không khuyến khích nó, vì điều này sẽ ảnh hưởng đến hiệu năng của Cache (nhưng nếu sử dụng bộ nhớ quan trọng hơn, đây có thể là một sự cân bằng hợp lý), bạn có thể tạo một chuỗi nền làm getKeysWithExpiryCheck() trong một khoảng thời gian bình thường.

Ngoài ra nếu mức tiêu thụ bộ nhớ là điểm chính, bạn có thể muốn xem Ehcache 2.5 mới, cho phép bạn (ngay cả ở cấp CacheManager) xác định số lượng heap sẽ được sử dụng ...

Các vấn đề liên quan