1.对äºjavaçåç§å¼ç¨ï¼å¼ºå¼ç¨ã软å¼ç¨ãå¼±å¼ç¨ãèå¼ç¨çç解
2.你不知道的Java的四种引用类型
3.[Android] Android优化应用之——软引用和弱引用
4.weakhashmapåhashmapçåºå«
对äºjavaçåç§å¼ç¨ï¼å¼ºå¼ç¨ã软å¼ç¨ãå¼±å¼ç¨ãèå¼ç¨çç解
对äºJAVAç³»ç»çå¼ç¨æåç§æ¹å¼ã强å¼ç¨ ä¸è¬æçéè¿new ãå°å建对象çå¼ç¨ãæ们ä¸è¬å¼åé½æ¯ä½¿ç¨è¿ä¸ç§å¼ç¨ã
软å¼ç¨ SoftReference ä¸è¬æ¯åºç¨å åææçç¼åï¼ææç软å¼ç¨ç对象é½æ¯ä¿è¯å¨ç¨åºæåºOutOfMemoryErrorä¹åé½åå¾åæ¶å¨åæ¶ã
å¼±å¼ç¨ WeakReference ä¸è¬ç¨äºå®ç°ä¸äºè§èåçæ å°å ³ç³»,å®æ¯æ¯ä¸æ¬¡GCåæ¶åï¼é½ä¼å¯¹å¼ç¨çåæ¶ï¼å¹¶ä¸å°åæ¶çå¯¹è±¡å ¥éå°RefereceQueueï¼ç±ä¸å±å»åæ¸ çå·¥ä½ãæ¯å¦WeakHashMapå°±æ¯ä½¿ç¨å¼±å¼ç¨ãå©ç¨RefereceQueueå»åæ¸ çæ æçvalueæ°æ®ï¼é¿å å åæ³æ¼ã
èå¼ç¨ PhantomReference ä¸è¬ç¨äºåæ¶å¯¹è±¡çæ¸ çæä½ï¼æ¯ä¸ç§æ¯å®ç°finalizeæ¹æ³æ´å å¼¹æ§çæ¹å¼ãæ 论æ¯å¦åçGCï¼å¼ç¨é½æ¯è¿ånullï¼å¯¹è±¡ä¼åä¼å ¥éReferenceQueueï¼ä¾¿äºåºç¨å±å»ææåæ¶ç对象åæ¸ çå·¥ä½ã
你不知道的Java的四种引用类型
Java中提供了四种独特的引用类型:强引用、软引用、弱引用和虚引用。其中,强引用(FinalReference)是包内可见的,而其他三种引用类型(软引用、看广告任务源码弱引用和虚引用)是公开的,可以直接在程序中使用。这些引用类型构成了Java内存管理的关键部分。
首先,强引用是最直接的引用形式,就像C语言中的linux 源码情景剖析指针,通过引用操作堆中的对象。例如,我们创建一个StringBuffer对象并用变量str指向它,str可以随时对对象进行操作。
强引用的特点包括:可以直接访问目标对象,即使在内存紧张时也不回收,可能导致内存泄漏。如果强引用过多,可能会导致程序因内存不足(OOM)而崩溃。
软引用则稍弱于强引用,它允许在内存紧张时被回收。素材站源码下载通过java.lang.ref.SoftReference实现。软引用用于内存敏感的缓存,如在堆内存接近极限时,软引用的对象会被回收,避免内存溢出。
弱引用进一步弱化了对对象的控制,当系统垃圾回收时,即使有弱引用,对象也可能被回收。这对于缓存数据的管理很有帮助,既能利用内存,app源码编译工具又能及时释放不再需要的资源。
虚引用是最弱的引用类型,几乎不提供对对象的控制。它们主要用于跟踪垃圾回收过程,当虚引用关联的对象被回收时,程序可以通过引用队列感知这一变化。
WeakHashMap是使用弱引用的典型例子,当内存不足时,它会自动释放与弱引用关联的数据。然而,如果WeakHashMap的绝地求生公布源码key由强引用持有,它的行为就会类似普通的HashMap。
[Android] Android优化应用之——软引用和弱引用
Java中对象引用分为四种级别,即强引用、软引用、弱引用和虚引用,它们灵活地控制着对象的生命周期。
软引用的特性是,内存充足时,垃圾回收器不会回收软引用对象;而内存不足时,回收器会回收这些对象的内存。软引用可用于内存敏感的高速缓存,与引用队列结合使用时,当软引用所引用的对象被垃圾回收,Java虚拟机会将其加入引用队列中。
弱引用比软引用拥有更短暂的生命周期,一旦内存不足,会立即回收。软引用和弱引用的区别在于内存管理策略的不同。
在Java.lang.ref包中,可以使用SoftReference、WeakReference和PhantomReference类分别表示软引用、弱引用和虚引用。ReferenceQueue类用于跟踪被垃圾回收的对象。
在Android开发中,防止内存溢出时,可利用软引用和弱引用技术处理大内存消耗且声明周期长的对象。
使用软引用示例:假设应用中频繁使用大量,如默认头像、游戏图标等。每次读取文件速度较慢,影响性能。为提高效率,将缓存至内存中。但大量占用大量内存,可能引发OutOfMemory异常。使用软引用可以解决此问题。
首先创建一个HashMap存储软引用对象。定义一个方法用于将Bitmap对象的软引用存储到HashMap中。获取时通过SoftReference类的get()方法获取Bitmap对象。使用软引用后,在发生OutOfMemory异常前,缓存的资源内存空间可被释放,避免内存上限导致应用崩溃。
需要注意的是,垃圾回收器回收Java对象前,SoftReference类提供的get方法返回其强引用。一旦垃圾回收,get方法返回null。在获取软引用对象的代码中,需判断是否为null,避免NullPointerException异常导致应用崩溃。
关于何时使用软引用与弱引用,通常使用软引用避免OutOfMemory异常,而使用弱引用关注性能,快速回收大内存占用对象。根据对象的使用频率判断,经常使用的对象更应使用软引用,不经常使用的则更适合弱引用。
WeakHashMap提供类似弱引用功能,对于给定的键,其映射的存在不会阻止垃圾回收器回收键,键回收后,条目从映射中移除。WeakHashMap同样利用了引用队列实现。
weakhashmapåhashmapçåºå«
ä¸.HashMap
1.HashMapæ¯åºäºKey-Valueçæ£å表(JDK7:æ°ç»+é¾è¡¨,JDK8:æ°ç»+é¾è¡¨+红é»æ )ï¼éç¨æé¾æ³å®ç°çãä¸è¬ç¨äºå线ç¨å½ä¸ï¼é线ç¨å®å ¨ï¼HashMapçé®æ¯"强é®"ã
2.继æ¿äºæ½è±¡ç±»AbstractMapï¼å¹¶ä¸å®ç°Mapæ¥å£ãéåæ¶ï¼åå¾çæ°æ®å®å ¨æ¯éæºçã
3.é»è®¤å®¹é大å°æ¯ï¼å è½½å åæ¯0.ã
4.æå¤åªå 许ä¸æ¡key为Nullï¼å 许å¤æ¡value为Nullã
5.HashMapå®ç°äºCloneableåSerializableæ¥å£ï¼èWeakHashMap没æã
1).HashMapå®ç°Cloneableï¼è¯´æå®è½éè¿clone()å éèªå·±ã
2).HashMapå®ç°Serializableï¼è¯´æå®æ¯æåºååï¼è½éè¿åºååå»ä¼ è¾ã
6.æ·»å ãå é¤æä½æ¶é´å¤æ度é½æ¯O(1)ã
äº.weakHashMap
1.weakHashMapæ¯åºäºKey-Valueçæ£å表(æ°ç»+é¾è¡¨)ï¼éç¨æé¾æ³å®ç°çãä¸è¬ç¨äºå线ç¨å½ä¸ï¼é线ç¨å®å ¨ï¼weakHashMapä¸çé®æ¯"å¼±é®"ã
å¤æ³¨ï¼å½"å¼±é®"被GCä¼æ¶æ¶ï¼å®å¯¹åºçé®å¼ä¹ä¼ä»weakHashMapä¸å é¤ã
2.继æ¿äºæ½è±¡ç±»AbstractMapï¼å¹¶ä¸å®ç°Mapæ¥å£ã
3.é»è®¤å®¹é大å°æ¯ï¼å è½½å åæ¯0.ã
4.æå¤åªå 许ä¸æ¡key为Nullï¼å 许å¤æ¡value为Nullã