緩存管理
『壹』 任務管理器性能裡面的內存已緩存是什麼意思
已緩存是越小越好。
已緩存是是已經用了的意思
『貳』 好眠的緩存管理是做什麼的
您好,出現這種情況的原因是您在之前已經開啟過21天睡眠計劃,所以再次開啟計劃好眠會提示您無法開啟。
您可以在「我的」中進入「緩存管理」,然後點擊「終止長期睡眠計劃」,即可刪除之前設置的睡眠計劃。這樣您就可以重新設定自己新的睡眠計劃了。
『叄』 對於比較耗內存的程序,windows能自動通過緩存進行管理保證運行嗎
你說的32位系統,緩存或者虛擬內存,是以犧牲硬碟壽命為代價的,而且還沒有真正內存運行快。有條件還是換8G內存,64位系統吧,那樣會流暢好多,不閃退。
『肆』 用u盤下載東西時電腦上的下載管理和緩存管理他倆要保持一致嗎
這個要看U盤數據傳輸速度,U盤一般速度是沒有硬碟速度快,所以下載時候電腦的緩存足夠U盤下載的速度
『伍』 計算機組成原理中,比較一下緩存管理中各種地址映射的方法
在計算機中,數據只用0和1兩種表現形式,(這里只表示一個數據點,不是數字),一個0或者1佔一個「位」,而系統中規定8個「位」為一個「位元組」,用來表示常用的256個字母、符號、控制標記。在64位計算機中,「一個字長」所佔的位元組數為8。字長的位元組數 = 計算機位數/8。 單位 是「比特」,也就是「位」(bit,簡稱b),它表示 1個二進制位 。比「位」大的單位是「位元組」(byte,簡稱B),它等於 8個二進制位 。
『陸』 java內存或者是緩存管理怎麼實現
我不太清楚你為什麼用map來存放數據?你用什麼作為key呢?如果是我做的話我會自定義一個對象,裡面大體上有如下屬性:發言人、發言時間、發言內容等。然後用list存放這些對象,list是由順序的。如果長度到達一定值可以把最先放進去的對象清除掉或移動到其他地方。
『柒』 如何使用Guava的緩存管理
看一下使用範例:
Java代碼
LoadingCache<Key,Graph> graphs =CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10,TimeUnit.MINUTES)
.removalListener(MY_LISTENER)
.build(
newCacheLoader<Key,Graph>(){
publicGraph load(Key key)throwsAnyException{
return createExpensiveGraph(key);
}
});
適用性
緩存在很多情況下都是非常有用的。比如,我們需要多次根據給定的輸入獲取值,而且該值計算或者獲取的開銷是非常昂貴的。
緩存和ConcurrentMap是非常相像的,但是它們也不完全一樣。最根本的區別就是,ConcurrentMap會持有所有添加的對象,直到被顯示的移除。而緩存為了限制其內存的使用,通常都會配置成可以自動的將對象移除。在某些情況下即使不自動移除對象也是非常有用的,如LoadingCache它會自動載入緩存對象。
一般,Guava緩存適用於以下幾種情況:
你願意花費一些內存來換取性能提升;
你預測到某些鍵會多次進行查詢;
你的緩存數據不超過內存(Guava緩存是單個應用中的本地緩存。它不會將數據存儲到文件中,或者外部伺服器。如果不適合你,可以考慮一下 Memcached)。
如果你的需要符合上面所說的每一條,那麼選擇Guava緩存絕對沒錯。
使用CacheBuilder的構建模式可以獲取一個Cache,如上面的範例所示。但是如何進行定製才是比較有趣的。
注意:如果你不需要緩存的這些特性,那麼使用ConcurrentHashMap會有更好的內存效率,但是如果想基於舊有的ConcurrentMap復制實現Cache的一些特性,那麼可能是非常困難或者根本不可能。
載入
對於緩存首先需要明確的是:有沒有一個方法可以通過給定的鍵來計算/載入相應的值?如果有,那麼可以使用CacheLoader。如果沒有這樣的方法,或者你想復寫緩存的載入方式,但你仍想保留「get-if-absent-compute」語義,你可以在調用get方法時傳入一個Callable實例,來達到目的。緩存的對象可以通過Cache.put直接插入,但是自動載入是首選,因為自動載入可以更加容易的判斷所有緩存信息的一致性。
From a CacheLoader
LoadingCache 緩存是通過一個CacheLoader來構建緩存。創建一個CacheLoader僅需要實現V load(K key) throws Exception方法即可。下面的範例就是如何創建一個LoadingCache:
Java代碼
LoadingCache<Key,Graph> graphs =CacheBuilder.newBuilder()
.maximumSize(1000)
.build(
newCacheLoader<Key,Graph>(){
publicGraph load(Key key)throwsAnyException{
return createExpensiveGraph(key);
}
});
...
try{
return graphs.get(key);
}catch(ExecutionException e){
thrownewOtherException(e.getCause());
}
通過方法get(K)可以對LoadingCache進行查詢。該方法要不返回已緩存的值,要不通過CacheLoader來自動載入相應的值到緩存中。這里需要注意的是:CacheLoader可能會拋出Exception,LoaderCache.get(K)則可能會拋出ExecutionException。假如你定義的CacheLoader沒有聲明檢查型異常,那麼可以通過調用getUnchecked(K)來獲取緩存值;但是一旦當CacheLoader中聲明了檢查型異常,則不可以調用getUnchecked。
Java代碼
LoadingCache<Key,Graph> graphs =CacheBuilder.newBuilder()
.expireAfterAccess(10,TimeUnit.MINUTES)
.build(
newCacheLoader<Key,Graph>(){
publicGraph load(Key key){// no checked exception
return createExpensiveGraph(key);
}
});
...
return graphs.getUnchecked(key);
批量查詢可以使用getAll(Iterable<? extends K>)方法。預設,getAll方法將循環每一個鍵調用CacheLoader.load方法獲取緩存值。當緩存對象的批量獲取比單獨獲取更有效時,可以通過復寫CacheLoader.loadAll方法實現緩存對象的載入。此時當調用getAll(Iterable)方法時性能也會提升。
需要注意的是CacheLoader.loadAll的實現可以為沒有明確要求的鍵載入緩存值。比如,當為某組中的一些鍵進行計算時,loadAll方法則可能會同時載入組中其餘鍵的值。
From a Callable
所有Guava緩存,不論是否會自動載入,都支持get(K, Callable(V))方法。當給定鍵的緩存值已存在時則直接返回,否則通過指定的Callable方法進行計算並將值存放到緩存中。直到載入完成時,相應的緩存才會被更改。該方法簡單實現了"if cached, return; otherwise create, cache and return"語義。
Java代碼
Cache<Key,Value> cache =CacheBuilder.newBuilder()
.maximumSize(1000)
.build();// look Ma, no CacheLoader
...
try{
// If the key wasn't in the "easy to compute" group, we need to
// do things the hard way.
cache.get(key,newCallable<Value>(){
@Override
publicValue call()throwsAnyException{
return doThingsTheHardWay(key);
}
});
}catch(ExecutionException e){
thrownewOtherException(e.getCause());
}
直接插入
使用cache.put(key, value)方法可以將值直接插入到緩存中,但這將會覆蓋緩存中已存在的值。通過使用Cache.asMap()所導出的ConcurrentMap對象中的方法也可以對緩存進行修改。但是,請注意asMap中的任何方法都不能自動的將數據載入到緩存中。也就是說,asMap中的各方法是在緩存自動載入范圍之外來運作。所以,當你使用CacheLoader或Callable來載入緩存時,應該優先使用Cache.get(K, Callable<V>),而不是Cache.asMap().putIfAbsent。
緩存回收
殘酷的現實是我們可以肯定的說我們沒有足夠的內存來緩存一切。你必須來決定:什麼時候緩存值不再值得保留?Guava提供了三種基本的緩存回收策略:基於容量回收策略,基於時間回收策略,基於引用回收策略。
基於容量回收策略
使用CacheBuilder.maximumSize(long)可以設置緩存的最大容量。緩存將會嘗試回收最近沒有使用,或者沒有經常使用的緩存項。警告:緩存可能會在容量達到限制之前執行回收,通常是在緩存大小逼近限制大小時。
另外,如果不同的緩存項有不同的「權重」, 如,緩存項有不同的內存佔用,此時你需要使用CacheBuilder.weigher(Weigher)指定一個權重計算函數,並使用CacheBuilder.maxmumWeight(long)設定總權重。和maximumSize同樣需要注意的是緩存也是在逼近總權重的時候進行回收處理。此外,緩存項的權重是在創建時進行計算,此後不再改變。
Java代碼
LoadingCache<Key,Graph> graphs =CacheBuilder.newBuilder()
.maximumWeight(100000)
.weigher(
newWeigher<Key,Graph>(){
publicint weigh(Key k,Graph g){
return g.vertices().size();
}
})
.build(
newCacheLoader<Key,Graph>(){
publicGraph load(Key key){// no checked exception
return createExpensiveGraph(key);
}
});
基於時間回收策略
CacheBuilder為基於時間的回收提供了兩種方式:
expireAfterAccess(long, TimeUnit) 當緩存項在指定的時間段內沒有被讀或寫就會被回收。這種回收策略類似於基於容量回收策略;
expireAfterWrite(long, TimeUnit) 當緩存項在指定的時間段內沒有更新就會被回收。如果我們認為緩存數據在一段時間後數據不再可用,那麼可以使用該種策略。
就如下面的討論,定時過期回收會在寫的過程中周期執行,偶爾也會讀的過程中執行。
測試定時回收
測試定時回收其實不需要那麼痛苦的,我們不必非得花費2秒來測試一個2秒的過期。在構建緩存時使用Ticker介面,並通過CacheBuilder.ticker(Ticker)方法指定時間源,這樣我們就不用傻乎乎等系統時鍾慢慢的走了。
基於引用回收策略
通過鍵或緩存值的弱引用(weak references),或者緩存值的軟引用(soft references),Guava可以將緩存設置為允許垃圾回收。
CacheBuilder.weakKeys() 使用弱引用存儲鍵。當沒有(強或軟)引用到該鍵時,相應的緩存項將可以被垃圾回收。由於垃圾回收是依賴==進行判斷,因此這樣會導致整個緩存也會使用==來比較鍵的相等性,而不是使用equals();
CacheBuilder.weakValues() 使用弱引用存儲緩存值。當沒有(強或軟)引用到該緩存項時,將可以被垃圾回收。由於垃圾回收是依賴==進行判斷,因此這樣會導致整個緩存也會使用==來比較緩存值的相等性,而不是使用equals();
CacheBuilder.softValues() 使用軟引用存儲緩存值。當響應需要時,軟引用才會被垃圾回收通過最少使用原則回收掉。由於使用軟引用造成性能上的影響,我們強烈建議使用可被預言的maximum cache size的策略來代替。同樣使用softValues()緩存值的比較也是使用==,而不是equals()。
顯示移除
在任何時候,你都可以可以通過下面的方法顯式將無效的緩存移除,而不是被動等待被回收:
使用Cache.invalidate(key)單個移除;
使用Cache.invalidteAll(keys)批量移除;
使用Cache.invalidateAll()移除全部。
『捌』 txt全本免費全小說不小心點到了緩存管理怎麼辦
TXT,全本免費小說,不小心點到的緩存管理怎麼辦?依然可以點擊下載