{"rsdb":{"rid":"241232","subhead":"","postdate":"0","aid":"166117","fid":"76","uid":"1","topic":"1","content":"
\n
\n \u539f\u6587\u51fa\u5904\uff1a \n \u963f\u675c<\/a>\n <\/div> \n

\u4eca\u5929\u4e00\u8d77\u6765\u770b\u4e0bjava<\/a>.util<\/em>\u5305\u91cc\u7684WeakHashMap<\/a>\u5de5\u5177\u7c7b\u3002<\/p> \n

WeakHashMap\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a<\/p> \n

public class WeakHashMap<K,V>\r\nextends AbstractMap<K,V>\r\nimplements Map<K,V><\/pre> \n 

\u7b80\u5355\u6765\u8bf4\uff0cWeakHashMap<\/em>\u5b9e\u73b0\u4e86Map<\/em>\u63a5\u53e3\uff0c\u57fa\u4e8ehash-table\u5b9e\u73b0\uff0c\u5728\u8fd9\u79cdMap\u4e2d\uff0ckey\u7684\u7c7b\u578b\u662fWeakReference<\/a>\u3002\u5982\u679c\u5bf9\u5e94\u7684key\u88ab\u56de\u6536\uff0c\u5219\u8fd9\u4e2akey\u6307\u5411\u7684\u5bf9\u8c61\u4f1a\u88ab\u4eceMap\u5bb9\u5668\u4e2d\u79fb\u9664\u3002<\/p> \n

WeakHashMap\u8ddf\u666e\u901a\u7684HashMap\u4e0d\u540c\uff0cWeakHashMap\u7684\u884c\u4e3a\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u57fa\u4e8e\u5783\u573e\u6536\u96c6\u5668\u7684\u884c\u4e3a\uff0c\u56e0\u6b64\u4e00\u4e9bMap\u6570\u636e\u7ed3\u6784\u5bf9\u5e94\u7684\u5e38\u8bc6\u5728WeakHashMap\u4e0a\u4f1a\u5931\u6548\u2014\u2014size()\u65b9\u6cd5\u7684\u8fd4\u56de\u503c\u4f1a\u968f\u7740\u7a0b\u5e8f\u7684\u8fd0\u884c\u53d8\u5c0f\uff0cisEmpty()\u65b9\u6cd5\u7684\u8fd4\u56de\u503c\u4f1a\u4ecefalse\u53d8\u6210true\u7b49\u7b49\u3002<\/p> \n

\u5f3a\u5f15\u7528\u3001\u8f6f\u5f15\u7528\u548c\u5f31\u5f15\u7528<\/h2> \n

\u201c\u5f15\u7528\u201d\uff0c\u5728Java\u4e2d\u6307\u7684\u662f\u4e00\u4e2a\u5bf9\u8c61\u5bf9\u53e6\u4e00\u5bf9\u8c61\u7684\u4f7f\u7528\uff08\u6307\u5411\uff09\u3002WeakHashMap\u4e2d\u7684\u952e\u7684\u7c7b\u578b\u662fWeakReference<\/a>\uff0c\u5728Java\u4e2d\u8fd8\u6709\u53e6\u5916\u4e24\u79cd\u5f15\u7528\uff1a\u5f3a\u5f15\u7528\uff08Strong Reference\uff09\u3001\u8f6f\u5f15\u7528\uff08Soft Reference\uff09\u3002<\/p> \n

\u5f3a\u5f15\u7528<\/h3> \n

\u88ab\u5f3a\u5f15\u7528\u6307\u5411\u7684\u5bf9\u8c61\uff0c\u7edd\u5bf9\u4e0d\u4f1a\u88ab\u5783\u573e\u6536\u96c6\u5668\u56de\u6536\u3002Integer prime = 1;<\/code>\uff0c\u8fd9\u4e2a\u8bed\u53e5\u4e2dprime\u5bf9\u8c61\u5c31\u6709\u4e00\u4e2a\u5f3a\u5f15\u7528\u3002<\/p> \n

\u8f6f\u5f15\u7528<\/h3> \n

\u88abSoftReference<\/a>\u6307\u5411\u7684\u5bf9\u8c61\u53ef\u80fd\u4f1a\u88ab\u5783\u573e\u6536\u96c6\u5668\u56de\u6536\uff0c\u4f46\u662f\u53ea\u6709\u5728JVM\u5185\u5b58\u4e0d\u591f\u7684\u60c5\u51b5\u4e0b\u624d\u4f1a\u56de\u6536\uff1b\u5982\u4e0b\u4ee3\u7801\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a\u8f6f\u5f15\u7528\uff1a<\/p> \n

Integer prime = 1;  \r\nSoftReference<Integer> soft = new SoftReference<Integer>(prime);\r\nprime = null;<\/pre> \n 

\u5f31\u5f15\u7528<\/h3> \n

\u5f53\u4e00\u4e2a\u5bf9\u8c61\u4ec5\u4ec5\u88abWeakReference\u5f15\u7528\u65f6\uff0c\u5728\u4e0b\u4e2a\u5783\u573e\u6536\u96c6\u5468\u671f\u65f6\u5019\u8be5\u5bf9\u8c61\u5c31\u4f1a\u88ab\u56de\u6536\u3002\u6211\u4eec\u901a\u8fc7\u4e0b\u9762\u4ee3\u7801\u521b\u5efa\u4e00\u4e2aWeakReference<\/em>\uff1a<\/p> \n

Integer prime = 1;  \r\nWeakReference<Integer> soft = new WeakReference<Integer>(prime);\r\nprime = null;<\/pre> \n 

\u5f53\u628aprime\u8d4b\u503c\u4e3anull\u7684\u65f6\u5019\uff0c\u539fprime\u5bf9\u8c61\u4f1a\u5728\u4e0b\u4e00\u4e2a\u5783\u573e\u6536\u96c6\u5468\u671f\u4e2d\u88ab\u56de\u6536\uff0c\u56e0\u4e3a\u5df2\u7ecf\u6ca1\u6709\u5f3a\u5f15\u7528\u6307\u5411\u5b83\u3002<\/p> \n

\u5229\u7528WeakHashMap\u5b9e\u73b0\u5185\u5b58\u7f13\u5b58<\/h2> \n

\u53ef\u4ee5\u770b\u51fa\uff0cWeakHashMap\u7684\u8fd9\u79cd\u7279\u6027\u6bd4\u8f83\u9002\u5408\u5b9e\u73b0\u7c7b\u4f3c\u672c\u5730\u3001\u5806\u5185\u7f13\u5b58\u7684\u5b58\u50a8\u673a\u5236\u2014\u2014\u7f13\u5b58\u7684\u5931\u6548\u4f9d\u8d56\u4e8eGC\u6536\u96c6\u5668\u7684\u884c\u4e3a\u3002\u5047\u8bbe\u4e00\u79cd\u5e94\u7528\u573a\u666f\uff1a\u6211\u4eec\u9700\u8981\u4fdd\u5b58\u4e00\u6279\u5927\u7684\u56fe\u7247\u5bf9\u8c61\uff0c\u5176\u4e2dvalues\u662f\u56fe\u7247\u7684\u5185\u5bb9\uff0ckey\u662f\u56fe\u7247\u7684\u540d\u5b57\uff0c\u8fd9\u91cc\u6211\u4eec\u9700\u8981\u9009\u62e9\u4e00\u79cd\u5408\u9002\u7684\u5bb9\u5668\u4fdd\u5b58\u8fd9\u4e9b\u5bf9\u8c61\u3002<\/p> \n

\u4f7f\u7528\u666e\u901a\u7684HashMap\u5e76\u4e0d\u662f\u597d\u7684\u9009\u62e9\uff0c\u8fd9\u4e9b\u5927\u5bf9\u8c61\u5c06\u4f1a\u5360\u7528\u5f88\u591a\u5185\u5b58\uff0c\u5e76\u4e14\u8fd8\u4e0d\u4f1a\u88abGC\u56de\u6536\uff0c\u9664\u975e\u6211\u4eec\u5728\u5bf9\u5e94\u7684key\u5e9f\u5f03\u4e4b\u524d\u4e3b\u52a8remove\u6389\u8fd9\u4e9b\u5143\u7d20\u3002WeakHashMap\u975e\u5e38\u9002\u5408\u4f7f\u7528\u5728\u8fd9\u79cd\u573a\u666f\u4e0b\uff0c\u4e0b\u9762\u7684\u4ee3\u7801\u6f14\u793a\u4e86\u5177\u4f53\u7684\u5b9e\u73b0\uff1a<\/p> \n

WeakHashMap<UniqueImageName, BigImage> map = new WeakHashMap<>();\r\nBigImage bigImage = new BigImage("image_id");\r\nUniqueImageName imageName = new UniqueImageName("name_of_big_image"); \/\/\u5f3a\u5f15\u7528\r\n\r\nmap.put(imageName, bigImage);\r\nassertTrue(map.containsKey(imageName));\r\n\r\nimageName = null; \/\/map\u4e2d\u7684values\u5bf9\u8c61\u6210\u4e3a\u5f31\u5f15\u7528\u5bf9\u8c61\r\nSystem.gc(); \/\/\u4e3b\u52a8\u89e6\u53d1\u4e00\u6b21GC\r\n\r\nawait().atMost(10, TimeUnit.SECONDS).until(map::isEmpty);<\/pre> \n 

\u9996\u5148\uff0c\u521b\u5efa\u4e00\u4e2aWeakHashMap\u5bf9\u8c61\u6765\u5b58\u50a8BigImage\u5b9e\u4f8b\uff0c\u5bf9\u5e94\u7684key\u662fUniqueImageName\u5bf9\u8c61\uff0c\u4fdd\u5b58\u5230WeakHashMap\u91cc\u7684\u65f6\u5019\uff0ckey\u662f\u4e00\u4e2a\u5f31\u5f15\u7528\u7c7b\u578b\u3002<\/p> \n

\u7136\u540e\uff0c\u6211\u4eec\u5c06imageName\u8bbe\u7f6e\u4e3anull\uff0c\u8fd9\u6837\u5c31\u6ca1\u6709\u5176\u4ed6\u5f3a\u5f15\u7528\u6307\u5411bigImage\u5bf9\u8c61\uff0c\u6309\u7167WeakHashMap\u7684\u89c4\u5219\uff0c\u5728\u4e0b\u4e00\u6b21GC\u5468\u671f\u4e2d\u4f1a\u56de\u6536bigImage\u5bf9\u8c61\u3002<\/p> \n

\u901a\u8fc7System.gc()<\/code>\u4e3b\u52a8\u89e6\u53d1\u4e00\u6b21GC\u8fc7\u7a0b\uff0c\u7136\u540e\u53ef\u4ee5\u53d1\u73b0WeakHashMap\u6210\u4e3a\u7a7a\u7684\u4e86\u3002<\/p> \n

\u603b\u7ed3<\/h2> \n

\u672c\u6587\u4eceWeakHashMap\u7684\u5b9a\u4e49\u8bb2\u8d77\uff0c\u53c8\u901a\u8fc7\u4ecb\u7ecdJava\u4e2d\u7684\u4e09\u79cd\u5f15\u7528\u7c7b\u578b\u6765\u7406\u89e3WeakHashMap\u7684\u5de5\u4f5c\u539f\u7406\uff0c\u6700\u540e\u5229\u7528\u4e00\u4e2a\u5b58\u50a8\u5927\u5bf9\u8c61\u7684\u4f8b\u5b50\u6f14\u793a\u4e86WeakHashMap\u7684\u5e94\u7528\u573a\u666f\u3002\u672c\u6587\u4e2d\u63d0\u5230\u7684\u4ee3\u7801\uff0c\u53ef\u4ee5\u5728GitHub\u5de5\u7a0b<\/a>\u770b\u5230\u3002<\/p> \n

\u53c2\u8003\u8d44\u6599<\/h2> \n
    \n
  1. Weak references \u2013 how useful are they?<\/a><\/li> \n
  2. Guide to WeakHashMap in Java<\/a><\/li> \n <\/ol> \n \n \n<\/div>","orderid":"0","title":"Java \u4e2d\u7684 WeakHashMap","smalltitle":"","mid":"0","fname":"JAVA","special_id":"0","bak_id":"0","info":"0","hits":"157","pages":"1","comments":"0","posttime":"2017-11-16 08:42:15","list":"1510792935","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/","ispic":"0","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"Java<\/A> WeakHashMap<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"14.20.29.17","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"Java \u4e2d\u7684 WeakHashMap","lastview":"1702905172","digg_num":"0","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}