Java的四種引用和回收策略
弱引用的Java應用:
ThreadLocal(ThreadLocalMap.Entry中key為弱引用,這樣如果key為null的話,有些方法如resize會清空entry中的value,垃圾回收的時候就會回收該entry)
static class ThreadLocalMap {
/**
* The entries in this hash map extend WeakReference, using
* its main ref field as the key (which is always a
* ThreadLocal object). Note that null keys (i.e. entry.get()
* == null) mean that the key is no longer referenced, so the
* entry can be expunged from table. Such entries are referred to
* as "stale entries" in the code that follows.
*/
static class Entry extends WeakReference<ThreadLocal<?>> {
/** The value associated with this ThreadLocal. */
Object value;
Entry(ThreadLocal<?> k, Object v) {
super(k);
value = v;
}
}
WeakHashMap(key為弱引用的HashMap)
軟引用的Java應用:
//Class中的快取
private volatile transient SoftReference<ReflectionData<T>> reflectionData;
// Incremented by the VM on each call to JVM TI RedefineClasses()
// that redefines this class or a superclass.
private volatile transient int classRedefinedCount = 0;
// Lazily create and cache ReflectionData
private ReflectionData<T> reflectionData() {
SoftReference<ReflectionData<T>> reflectionData = this.reflectionData;
int classRedefinedCount = this.classRedefinedCount;
ReflectionData<T> rd;
if (useCaches &&
reflectionData != null &&
(rd = reflectionData.get()) != null &&
rd.redefinedCount == classRedefinedCount) {
return rd;
}
// else no SoftReference or cleared SoftReference or stale ReflectionData
// -> create and replace new instance
return newReflectionData(reflectionData, classRedefinedCount);
}
其實SoftReference和WeakReference都經常用來作為快取來使用,不過WeakReference更容易被清除而已。
Java的守護執行緒參考:
從Daemons到finalize timed out after 10 seconds
相關文章
- Java的四種引用Java
- Java 四種引用的解讀Java
- Java中的四種引用方式(強引用、軟引用、弱引用、虛引用)Java
- Java四種引用包括強引用,軟引用,弱引用,虛引用。Java
- Java中的四種引用型別Java型別
- 詳聊Java的四種引用型別Java型別
- 安卓四種引用安卓
- 面試官:說說Java物件的四種引用方式面試Java物件
- Java中強、軟、弱、虛四種引用詳解Java
- Java四種引用解析以及在Android的應用JavaAndroid
- Java 執行緒池四種拒絕策略Java執行緒
- css中圖片的四種地址引用CSS
- 這次把Java的四種引用一次性說清楚Java
- 美團一面:說一說Java中的四種引用型別?Java型別
- Java虛擬機器15:再談四種引用狀態Java虛擬機
- Java四大引用詳解:強引用、軟引用、弱引用、虛引用Java
- 理解Java的強引用、軟引用、弱引用和虛引用Java
- java的四大引用型別Java型別
- Java中的四大引用筆記Java筆記
- java四大引用總結Java
- Python中的物件引用、可變性和垃圾回收Python物件
- Java引用型別解析:掌握強引用、軟引用、弱引用和幻象引用的妙用Java型別
- 2017年——京東大神教你如何學習Java中的四種引用Java
- [分散式][高併發]限流的四種策略分散式
- JVM垃圾回收和記憶體分配策略JVM記憶體
- 什麼是java四大引用?Java
- GC判定與回收演算法+java物件引用型別GC演算法Java物件型別
- [C++]指標和引用(四)C++指標
- Java虛擬機器05——物件分配與回收策略Java虛擬機物件
- java中Stream的四種建立Java
- Java 建立類的四種方式Java
- JAVA解析XML的四種方法JavaXML
- PHP的垃圾回收機制-引用計數PHP
- Java的強引用、軟引用、弱引用、虛引用Java
- Java虛擬機器02——物件存活判斷和4種引用Java虛擬機物件
- java的引用:用C++/C的引用和指標去理解JavaC++指標
- Java虛擬機器記憶體分配與回收策略Java虛擬機記憶體
- 知道執行緒池的四種拒絕策略嗎?執行緒