Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
AndroidÐÔÄÜÓÅ»¯ÏµÁÐÖ®ÄÚ´æÓÅ»¯
 
À´Ô´£ºcsdn ·¢²¼ÓÚ£º 2017-2-17
  2232  次浏览      31
 

ÔÚJavaÖУ¬ÄÚ´æµÄ·ÖÅäÊÇÓɳÌÐòÍê³ÉµÄ£¬¶øÄÚ´æµÄÊÍ·ÅÊÇÓÉÀ¬»øÊÕ¼¯Æ÷(Garbage Collection£¬GC)Íê³ÉµÄ£¬³ÌÐòÔ±²»ÐèҪͨ¹ýµ÷Óú¯ÊýÀ´ÊÍ·ÅÄڴ棬µ«Ò²ËæÖ®´øÀ´ÁËÄÚ´æÐ¹Â©µÄ¿ÉÄÜ£¬ÉÏÆª²©¿Í£¬ÎÒ½éÉÜÁË AndroidÐÔÄÜÓÅ»¯ÏµÁÐÖ®²¼¾ÖÓÅ»¯£¬±¾Æª²©¿Í£¬ÎÒ½«½éÉÜÄÚ´æÓÅ»¯µÄÏà¹ØÖªÊ¶¡£

ÄÚ´æµÄ·ÖÅä²ßÂÔ¸ÅÊö

³ÌÐòÔËÐÐʱµÄÄÚ´æ·ÖÅäÓÐÈýÖÖ²ßÂÔ,·Ö±ðÊǾ²Ì¬µÄ,ջʽµÄ,ºÍ¶ÑʽµÄ£¬¶ÔÓ¦µÄ£¬ÈýÖÖ´æ´¢²ßÂÔʹÓõÄÄÚ´æ¿Õ¼äÖ÷Òª·Ö±ðÊǾ²Ì¬´æ´¢Çø£¨Ò²³Æ·½·¨Çø£©¡¢¶ÑÇøºÍÕ»Çø¡£

¾²Ì¬´æ´¢Çø£¨·½·¨Çø£©£ºÄÚ´æÔÚ³ÌÐò±àÒëµÄʱºò¾ÍÒѾ­·ÖÅäºÃ£¬Õâ¿éÄÚ´æÔÚ³ÌÐòÕû¸öÔËÐÐÆÚ¼ä¶¼´æÔÚ¡£ËüÖ÷Òª´æ·Å¾²Ì¬Êý¾Ý¡¢È«¾ÖstaticÊý¾ÝºÍ³£Á¿¡£

Õ»Çø£ºÔÚÖ´Ðк¯Êýʱ£¬º¯ÊýÄÚ¾Ö²¿±äÁ¿µÄ´æ´¢µ¥Ôª¶¼¿ÉÒÔÔÚÕ»ÉÏ´´½¨£¬º¯ÊýÖ´ÐнáÊøÊ±ÕâЩ´æ´¢µ¥Ôª×Ô¶¯±»ÊÍ·Å¡£Õ»ÄÚ´æ·ÖÅäÔËËãÄÚÖÃÓÚ´¦ÀíÆ÷µÄÖ¸ÁÖУ¬Ð§Âʺܸߣ¬µ«ÊÇ·ÖÅäµÄÄÚ´æÈÝÁ¿ÓÐÏÞ¡£

¶ÑÇø£ºÒà³Æ¶¯Ì¬ÄÚ´æ·ÖÅä¡£³ÌÐòÔÚÔËÐеÄʱºòÓÃmalloc»ònewÉêÇëÈÎÒâ´óСµÄÄڴ棬³ÌÐòÔ±×Ô¼º¸ºÔðÔÚÊʵ±µÄʱºòÓÃfree»òdeleteÊÍ·ÅÄڴ棨JavaÔòÒÀÀµÀ¬»ø»ØÊÕÆ÷£©¡£¶¯Ì¬ÄÚ´æµÄÉú´æÆÚ¿ÉÒÔÓÉÎÒÃǾö¶¨£¬Èç¹ûÎÒÃDz»ÊÍ·ÅÄڴ棬³ÌÐò½«ÔÚ×îºó²ÅÊͷŵô¶¯Ì¬ÄÚ´æ¡£ µ«ÊÇ£¬Á¼ºÃµÄ±à³Ìϰ¹ßÊÇ£ºÈç¹ûij¶¯Ì¬ÄÚ´æ²»ÔÙʹÓã¬ÐèÒª½«ÆäÊͷŵô¡£

¶ÑºÍÕ»µÄÇø±ð£º

ÔÚº¯ÊýÖУ¨ËµÃ÷ÊǾֲ¿±äÁ¿£©¶¨ÒåµÄһЩ»ù±¾ÀàÐ͵ıäÁ¿ºÍ¶ÔÏóµÄÒýÓñäÁ¿¶¼ÊÇÔÚº¯ÊýµÄÕ»ÄÚ´æÖзÖÅä¡£µ±ÔÚÒ»¶Î´úÂë¿éÖж¨ÒåÒ»¸ö±äÁ¿Ê±£¬java¾ÍÔÚÕ»ÖÐΪÕâ¸ö±äÁ¿·ÖÅäÄÚ´æ¿Õ¼ä£¬µ±³¬¹ý±äÁ¿µÄ×÷ÓÃÓòºó£¬java»á×Ô¶¯ÊͷŵôΪ¸Ã±äÁ¿·ÖÅäµÄÄÚ´æ¿Õ¼ä£¬¸ÃÄÚ´æ¿Õ¼ä¿ÉÒÔÁ¢¿Ì±»Áí×÷ËûÓá£

¶ÑÄÚ´æÓÃÓÚ´æ·ÅËùÓÐÓÉnew´´½¨µÄ¶ÔÏó£¨ÄÚÈݰüÀ¨¸Ã¶ÔÏóÆäÖеÄËùÓгÉÔ±±äÁ¿£©ºÍÊý×é¡£ÔÚ¶ÑÖзÖÅäµÄÄڴ棬ÓÉjavaÐéÄâ»ú×Ô¶¯À¬»ø»ØÊÕÆ÷À´¹ÜÀí¡£ÔÚ¶ÑÖвúÉúÁËÒ»¸öÊý×é»òÕß¶ÔÏóºó£¬»¹¿ÉÒÔÔÚÕ»Öж¨ÒåÒ»¸öÌØÊâµÄ±äÁ¿£¬Õâ¸ö±äÁ¿µÄȡֵµÈÓÚÊý×é»òÕß¶ÔÏóÔÚ¶ÑÄÚ´æÖеÄÊ×µØÖ·£¬ÔÚÕ»ÖеÄÕâ¸öÌØÊâµÄ±äÁ¿¾Í±ä³ÉÁËÊý×é»òÕß¶ÔÏóµÄÒýÓñäÁ¿£¬ÒÔºó¾Í¿ÉÒÔÔÚ³ÌÐòÖÐʹÓÃÕ»ÄÚ´æÖеÄÒýÓñäÁ¿À´·ÃÎʶÑÖеÄÊý×é»òÕß¶ÔÏó£¬ÒýÓñäÁ¿Ï൱ÓÚΪÊý×é»òÕß¶ÔÏóÆðµÄÒ»¸ö±ðÃû£¬»òÕß´úºÅ

¶ÑÊDz»Á¬ÐøµÄÄÚ´æÇøÓò£¨ÒòΪϵͳÊÇÓÃÁ´±íÀ´´æ´¢¿ÕÏÐÄÚ´æµØÖ·£¬×ÔÈ»²»ÊÇÁ¬ÐøµÄ£©£¬¶Ñ´óСÊÜÏÞÓÚ¼ÆËã»úϵͳÖÐÓÐЧµÄÐéÄâÄڴ棨32bitϵͳÀíÂÛÉÏÊÇ4G£©£¬ËùÒԶѵĿռä±È½ÏÁé»î£¬±È½Ï´ó¡£Õ»ÊÇÒ»¿éÁ¬ÐøµÄÄÚ´æÇøÓò£¬´óСÊDzÙ×÷ϵͳԤ¶¨ºÃµÄ£¬windowsÏÂÕ»´óСÊÇ2M£¨Ò²ÓÐÊÇ1M£¬ÔÚ±àÒëʱȷ¶¨£¬VCÖпÉÉèÖã©¡£

¶ÔÓÚ¶Ñ£¬Æµ·±µÄnew/delete»áÔì³É´óÁ¿ÄÚ´æË鯬£¬Ê¹³ÌÐòЧÂʽµµÍ¡£¶ÔÓÚÕ»£¬ËüÊÇÏȽøºó³öµÄ¶ÓÁУ¬½ø³öÒ»Ò»¶ÔÓ¦£¬²»²úÉúË鯬£¬ÔËÐÐЧÂÊÎȶ¨¸ß¡£

ËùÒÔÎÒÃÇ¿ÉÒԵóö½áÂÛ£º

1.¾Ö²¿±äÁ¿µÄ»ù±¾Êý¾ÝÀàÐͺÍÒýÓô洢ÓÚÕ»ÖУ¬ÒýÓõĶÔÏóʵÌå´æ´¢ÓÚ¶ÑÖС£ÒòΪËüÃÇÊôÓÚ·½·¨ÖеıäÁ¿£¬ÉúÃüÖÜÆÚËæ·½·¨¶ø½áÊø¡£

2.³ÉÔ±±äÁ¿È«²¿´æ´¢Óë¶ÑÖУ¨°üÀ¨»ù±¾Êý¾ÝÀàÐÍ£¬ÒýÓúÍÒýÓõĶÔÏóʵÌ壩£¬ÒòΪËüÃÇÊôÓÚÀ࣬Àà¶ÔÏóÖÕ¾¿ÊÇÒª±»new³öÀ´Ê¹Óõġ£

3.ÎÒÃÇËù˵µÄÄÚ´æÐ¹Â¶£¬Ö»Õë¶Ô¶ÑÄڴ棬ËûÃÇ´æ·ÅµÄ¾ÍÊÇÒýÓÃÖ¸ÏòµÄ¶ÔÏóʵÌå¡£

ÄÚ´æÐ¹Â¶²úÉúµÄÔ­Òò

ÔÚJavaÖУ¬ÄÚ´æµÄ·ÖÅäÊÇÓɳÌÐòÍê³ÉµÄ£¬¶øÄÚ´æµÄÊÍ·ÅÊÇÓÉÀ¬»øÊÕ¼¯Æ÷(Garbage Collection£¬GC)Íê³ÉµÄ£¬³ÌÐòÔ±²»ÐèҪͨ¹ýµ÷Óú¯ÊýÀ´ÊÍ·ÅÄڴ棬µ«ËüÖ»ÄÜ»ØÊÕÎÞÓò¢ÇÒ²»ÔÙ±»ÆäËü¶ÔÏóÒýÓõÄÄÇЩ¶ÔÏóËùÕ¼ÓõĿռ䡣

JavaµÄÄÚ´æÀ¬»ø»ØÊÕ»úÖÆÊÇ´Ó³ÌÐòµÄÖ÷ÒªÔËÐжÔÏó(È羲̬¶ÔÏó/¼Ä´æÆ÷/Õ»ÉÏÖ¸ÏòµÄ¶ÑÄÚ´æ¶ÔÏóµÈ)¿ªÊ¼¼ì²éÒýÓÃÁ´£¬µ±±éÀúÒ»±éºóµÃµ½ÉÏÊöÕâЩÎÞ·¨»ØÊյĶÔÏóºÍËûÃÇËùÒýÓõĶÔÏóÁ´£¬×é³ÉÎÞ·¨»ØÊյĶÔÏ󼯺ϣ¬¶øÆäËû¹ÂÁ¢¶ÔÏ󣨼¯£©¾Í×÷ΪÀ¬»ø»ØÊÕ¡£GCΪÁËÄܹ»ÕýÈ·ÊͷŶÔÏ󣬱ØÐë¼à¿ØÃ¿Ò»¸ö¶ÔÏóµÄÔËÐÐ״̬£¬°üÀ¨¶ÔÏóµÄÉêÇë¡¢ÒýÓᢱ»ÒýÓᢸ³ÖµµÈ£¬GC¶¼ÐèÒª½øÐÐ¼à¿Ø¡£¼àÊÓ¶ÔÏó״̬ÊÇΪÁ˸ü¼Ó׼ȷµØ¡¢¼°Ê±µØÊͷŶÔÏ󣬶øÊͷŶÔÏóµÄ¸ù±¾Ô­Ôò¾ÍÊǸöÔÏó²»ÔÙ±»ÒýÓá£

ÔÚJavaÖУ¬ÕâЩÎÞÓõĶÔÏó¶¼ÓÉGC¸ºÔð»ØÊÕ£¬Òò´Ë³ÌÐòÔ±²»ÐèÒª¿¼ÂÇÕⲿ·ÖµÄÄÚ´æÐ¹Â¶¡£ËäÈ»£¬ÎÒÃÇÓм¸¸öº¯Êý¿ÉÒÔ·ÃÎÊGC£¬ÀýÈçÔËÐÐGCµÄº¯ÊýSystem.gc()£¬µ«ÊǸù¾ÝJavaÓïÑԹ淶¶¨Ò壬¸Ãº¯Êý²»±£Ö¤JVMµÄÀ¬»øÊÕ¼¯Æ÷Ò»¶¨»áÖ´ÐС£ÒòΪ²»Í¬µÄJVMʵÏÖÕß¿ÉÄÜʹÓò»Í¬µÄËã·¨¹ÜÀíGC¡£Í¨³£GCµÄÏ̵߳ÄÓÅÏȼ¶±ð½ÏµÍ¡£JVMµ÷ÓÃGCµÄ²ßÂÔÒ²ÓкܶàÖÖ£¬ÓеÄÊÇÄÚ´æÊ¹Óõ½´ïÒ»¶¨³Ì¶Èʱ£¬GC²Å¿ªÊ¼¹¤×÷£¬Ò²Óж¨Ê±Ö´Ðеģ¬ÓеÄÊÇÆ½»ºÖ´ÐÐGC£¬ÓеÄÊÇÖжÏʽִÐÐGC¡£µ«Í¨³£À´Ëµ£¬ÎÒÃDz»ÐèÒª¹ØÐÄÕâЩ¡£

µ«ÊÇÎÒÃÇÈÔÈ»¿ÉÒÔÈ¥¼àÌýϵͳµÄGC¹ý³Ì£¬ÒÔ´ËÀ´·ÖÎöÎÒÃÇÓ¦ÓóÌÐòµ±Ç°µÄÄÚ´æ×´Ì¬¡£ÄÇôÔõÑù²ÅÄÜÈ¥¼àÌýϵͳµÄGC¹ý³ÌÄØ£¿Æäʵ·Ç³£¼òµ¥£¬ÏµÍ³Ã¿½øÐÐÒ»´ÎGC²Ù×÷ʱ£¬¶¼»áÔÚLogCatÖдòÓ¡Ò»ÌõÈÕÖ¾£¬ÎÒÃÇֻҪȥ·ÖÎöÕâÌõÈÕÖ¾¾Í¿ÉÒÔÁË£¬ÈÕÖ¾µÄ»ù±¾¸ñʽÈçÏÂËùʾ£º

1.D/dalvikvm: <GC_Reason> <Amount_freed>, <Heap_stats>, <Pause_time>

Ê×ÏȵÚÒ»²¿·ÖGC_Reason£¬Õâ¸öÊÇ´¥·¢Õâ´ÎGC²Ù×÷µÄÔ­Òò£¬Ò»°ãÇé¿öÏÂÒ»¹²ÓÐÒÔϼ¸ÖÖ´¥·¢GC²Ù×÷µÄÔ­Òò£º

GC_CONCURRENT: µ±ÎÒÃÇÓ¦ÓóÌÐòµÄ¶ÑÄÚ´æ¿ìÒªÂúµÄʱºò£¬ÏµÍ³»á×Ô¶¯´¥·¢GC²Ù×÷À´ÊÍ·ÅÄÚ´æ¡£

GC_FOR_MALLOC: µ±ÎÒÃǵÄÓ¦ÓóÌÐòÐèÒª·ÖÅä¸ü¶àÄڴ棬¿ÉÊÇÏÖÓÐÄÚ´æÒѾ­²»×ãµÄʱºò£¬ÏµÍ³»á½øÐÐGC²Ù×÷À´ÊÍ·ÅÄÚ´æ¡£

GC_HPROF_DUMP_HEAP: µ±Éú³ÉHPROFÎļþµÄʱºò£¬ÏµÍ³»á½øÐÐGC²Ù×÷£¬¹ØÓÚHPROFÎļþÎÒÃÇÏÂÃæ»á½²µ½¡£

GC_EXPLICIT: ÕâÖÖÇé¿ö¾ÍÊÇÎÒÃǸղÅÌáµ½¹ýµÄ£¬Ö÷¶¯Í¨ÖªÏµÍ³È¥½øÐÐGC²Ù×÷£¬±ÈÈçµ÷ÓÃSystem.gc()·½·¨À´Í¨ÖªÏµÍ³¡£»òÕßÔÚDDMSÖУ¬Í¨¹ý¹¤¾ß°´Å¥Ò²ÊÇ¿ÉÒÔÏÔʽµØ¸æËßϵͳ½øÐÐGC²Ù×÷µÄ¡£

½ÓÏÂÀ´µÚ¶þ²¿·ÖAmount_freed£¬±íʾϵͳͨ¹ýÕâ´ÎGC²Ù×÷ÊÍ·ÅÁ˶àÉÙÄÚ´æ¡£

È»ºóHeap_statsÖлáÏÔʾµ±Ç°ÄÚ´æµÄ¿ÕÏбÈÀýÒÔ¼°Ê¹ÓÃÇé¿ö£¨»î¶¯¶ÔÏóËùÕ¼ÄÚ´æ / µ±Ç°³ÌÐò×ÜÄڴ棩¡£

×îºóPause_time±íʾÕâ´ÎGC²Ù×÷µ¼ÖÂÓ¦ÓóÌÐòÔÝÍ£µÄʱ¼ä¡£¹ØÓÚÕâ¸öÔÝÍ£µÄʱ¼ä£¬AndroidÔÚ2.3µÄ°æ±¾µ±ÖнøÐйýÒ»´ÎÓÅ»¯£¬ÔÚ2.3֮ǰGC²Ù×÷ÊDz»Äܲ¢·¢½øÐеģ¬Ò²¾ÍÊÇϵͳÕýÔÚ½øÐÐGC£¬ÄÇôӦÓóÌÐò¾ÍÖ»ÄÜ×èÈûסµÈ´ýGC½áÊø¡£Ëä˵Õâ¸ö×èÈûµÄ¹ý³Ì²¢²»»áºÜ³¤£¬Ò²¾ÍÊǼ¸°ÙºÁÃ룬µ«ÊÇÓû§ÔÚʹÓÃÎÒÃǵijÌÐòʱ»¹ÊÇÓпÉÄÜ»á¸Ð¾õµ½ÂÔ΢µÄ¿¨¶Ù¡£¶ø×Ô2.3Ö®ºó£¬GC²Ù×÷¸Ä³ÉÁ˲¢·¢µÄ·½Ê½½øÐУ¬¾ÍÊÇ˵GCµÄ¹ý³ÌÖв»»áÓ°Ïìµ½Ó¦ÓóÌÐòµÄÕý³£ÔËÐУ¬µ«ÊÇÔÚGC²Ù×÷µÄ¿ªÊ¼ºÍ½áÊøµÄʱºò»á¶ÌÔÝ×èÈûÒ»¶Îʱ¼ä£¬²»¹ýÓÅ»¯µ½ÕâÖ̶ֳȣ¬Óû§ÒѾ­ÊÇÍêÈ«ÎÞ·¨²ì¾õµ½ÁË¡£

ÎÒÃÇÀ´¿´¿´JavaÖÐÐèÒª±»»ØÊÕµÄÀ¬»ø£º

£û
Person p1 = new Person();
¡­¡­
£ý

ÒýÓþä±úp1µÄ×÷ÓÃÓòÊÇ´Ó¶¨Òåµ½¡°£ý¡±´¦£¬Ö´ÐÐÍêÕâ¶Ô´óÀ¨ºÅÖеÄËùÓдúÂëºó£¬²úÉúµÄPerson¶ÔÏó¾Í»á±ä³ÉÀ¬»ø£¬ÒòΪÒýÓÃÕâ¸ö¶ÔÏóµÄ¾ä±úp1Òѳ¬¹ýÆä×÷ÓÃÓò£¬p1ʧЧ£¬ÔÚÕ»Öб»Ïú»Ù£¬Òò´Ë¶ÑÉϵÄPerson¶ÔÏó²»ÔÙ±»Èκξä±úÒýÓÃÁË¡£ Òò´Ëperson±äΪÀ¬»ø£¬»á±»»ØÊÕ¡£

ÕâÀïÎÒÃÇÐèÒª½²ÊöÒ»¸ö¹Ø¼ü´Ê£ºÒýÓã¬Í¨¹ýAÄܵ÷Óò¢·ÃÎʵ½£Â£¬ÄǾÍ˵Ã÷£Á³ÖÓУµÄÒýÓ㬻òA¾ÍÊÇBµÄÒýÓ㬣µÄÒýÓüÆÊý£«£±.

£¨£±£©±ÈÈç Person p1 = new Person();ͨ¹ý£Ð£±ÄܲÙ×÷Person¶ÔÏó£¬Òò´Ë£Ð£±ÊÇPersonµÄÒýÓã»

£¨£²£©±ÈÈçÀàOÖÐÓÐÒ»¸ö³ÉÔ±±äÁ¿ÊÇIÀà¶ÔÏó£¬Òò´ËÎÒÃÇ¿ÉÒÔʹÓÃo.iµÄ·½Ê½À´·ÃÎÊIÀà¶ÔÏóµÄ³ÉÔ±£¬Òò´Ëo³ÖÓÐÒ»¸öi¶ÔÏóµÄÒýÓá£

GC¹ý³ÌÓë¶ÔÏóµÄÒýÓÃÀàÐÍÊÇÑÏÖØÏà¹ØµÄ£¬ÎÒÃÇÀ´¿´¿´Java¶ÔÒýÓõķÖÀàStrong reference, SoftReference, WeakReference, PhatomReference

ÔÚAndroidÓ¦ÓõĿª·¢ÖУ¬ÎªÁË·ÀÖ¹ÄÚ´æÒç³ö£¬ÔÚ´¦ÀíһЩռÓÃÄÚ´æ´ó¶øÇÒÉùÃ÷ÖÜÆÚ½Ï³¤µÄ¶ÔÏóʱºò£¬¿ÉÒÔ¾¡Á¿Ó¦ÓÃÈíÒýÓúÍÈõÒýÓü¼Êõ¡£

Èí/ÈõÒýÓÿÉÒÔºÍÒ»¸öÒýÓöÓÁУ¨ReferenceQueue£©ÁªºÏʹÓã¬Èç¹ûÈíÒýÓÃËùÒýÓõĶÔÏó±»À¬»ø»ØÊÕÆ÷»ØÊÕ£¬JavaÐéÄâ»ú¾Í»á°ÑÕâ¸öÈíÒýÓüÓÈëµ½ÓëÖ®¹ØÁªµÄÒýÓöÓÁÐÖС£ÀûÓÃÕâ¸ö¶ÓÁпÉÒÔµÃÖª±»»ØÊÕµÄÈí/ÈõÒýÓõĶÔÏóÁÐ±í£¬´Ó¶øÎª»º³åÆ÷Çå³ýÒÑʧЧµÄÈí/ÈõÒýÓá£

¼ÙÉèÎÒÃǵÄÓ¦ÓûáÓõ½´óÁ¿µÄĬÈÏͼƬ£¬±ÈÈçÓ¦ÓÃÖÐÓÐĬÈϵÄÍ·Ïñ£¬Ä¬ÈÏÓÎϷͼ±êµÈµÈ£¬ÕâЩͼƬºÜ¶àµØ·½»áÓõ½¡£Èç¹ûÿ´Î¶¼È¥¶ÁȡͼƬ£¬ÓÉÓÚ¶ÁÈ¡ÎļþÐèÒªÓ²¼þ²Ù×÷£¬ËٶȽÏÂý£¬»áµ¼ÖÂÐÔÄܽϵ͡£ËùÒÔÎÒÃÇ¿¼Âǽ«Í¼Æ¬»º´æÆðÀ´£¬ÐèÒªµÄʱºòÖ±½Ó´ÓÄÚ´æÖжÁÈ¡¡£µ«ÊÇ£¬ÓÉÓÚͼƬռÓÃÄÚ´æ¿Õ¼ä±È½Ï´ó£¬»º´æºÜ¶àͼƬÐèÒªºÜ¶àµÄÄڴ棬¾Í¿ÉÄܱȽÏÈÝÒ×·¢ÉúOutOfMemoryÒì³£¡£Õâʱ£¬ÎÒÃÇ¿ÉÒÔ¿¼ÂÇʹÓÃÈí/ÈõÒýÓü¼ÊõÀ´±ÜÃâÕâ¸öÎÊÌâ·¢Éú¡£ÒÔϾÍÊǸßËÙ»º³åÆ÷µÄ³ûÐΣº

Ê×Ïȶ¨ÒåÒ»¸öHashMap£¬±£´æÈíÒýÓöÔÏó¡£

1.private Map<String, SoftReference<Bitmap>> 
imageCache = new HashMap<String, SoftReference<Bitmap>>();
1

ÔÙÀ´¶¨ÒåÒ»¸ö·½·¨£¬±£´æBitmapµÄÈíÒýÓõ½HashMap

public class CacheSoftRef {

//Ê×Ïȶ¨ÒåÒ»¸öHashMap,±£´æÒýÓöÔÏó
private Map<String, SoftReference<Bitmap>> imageCache = new HashMap<String, SoftReference<Bitmap>>();

//ÔÙÀ´¶¨ÒåÒ»¸ö·½·¨£¬±£´æBitmapµÄÈíÒýÓõ½HashMap
public void addBitmapToCache(String path) {
//Ç¿ÒýÓõÄBitmap¶ÔÏó
Bitmap bitmap = BitmapFactory.decodeFile(path);
//ÈíÒýÓõÄBitmap¶ÔÏó
SoftReference<Bitmap> softBitmap = new SoftReference<Bitmap>(bitmap);
//Ìí¼Ó¸Ã¶ÔÏóµ½MapÖÐʹÆä»º´æ
imageCache.put(path, softBitmap);
}

//»ñÈ¡µÄʱºò£¬¿ÉÒÔͨ¹ýSoftReferenceµÄget()·½·¨µÃµ½Bitmap¶ÔÏó
public Bitmap getBitmapByPath(String path) {
//´Ó»º´æÖÐÈ¡ÈíÒýÓõÄBitmap¶ÔÏó
SoftReference<Bitmap> softBitmap = imageCache.get(path);
//ÅжÏÊÇ·ñ´æÔÚÈíÒýÓÃ
if (softBitmap == null) {
return null;
}
//ͨ¹ýÈíÒýÓÃÈ¡³öBitmap¶ÔÏó£¬Èç¹ûÓÉÓÚÄÚ´æ²»×ãBitmap±»»ØÊÕ£¬½«È¡µÃ¿Õ£¬Èç¹ûδ±»»ØÊÕ£¬
//Ôò¿ÉÖØ¸´Ê¹Óã¬Ìá¸ßËÙ¶È¡£
Bitmap bitmap = softBitmap.get();
return bitmap;
}
}

ʹÓÃÈíÒýÓÃÒÔºó£¬ÔÚOutOfMemoryÒì³£·¢Éú֮ǰ£¬ÕâЩ»º´æµÄͼƬ×ÊÔ´µÄÄÚ´æ¿Õ¼ä¿ÉÒÔ±»ÊͷŵôµÄ£¬´Ó¶ø±ÜÃâÄÚ´æ´ïµ½ÉÏÏÞ£¬±ÜÃâCrash·¢Éú¡£

Èç¹ûÖ»ÊÇÏë±ÜÃâOutOfMemoryÒì³£µÄ·¢Éú£¬Ôò¿ÉÒÔʹÓÃÈíÒýÓá£Èç¹û¶ÔÓÚÓ¦ÓõÄÐÔÄܸüÔÚÒ⣬Ï뾡¿ì»ØÊÕһЩռÓÃÄÚ´æ±È½Ï´óµÄ¶ÔÏó£¬Ôò¿ÉÒÔʹÓÃÈõÒýÓá£

ÁíÍâ¿ÉÒÔ¸ù¾Ý¶ÔÏóÊÇ·ñ¾­³£Ê¹ÓÃÀ´ÅжÏÑ¡ÔñÈíÒýÓû¹ÊÇÈõÒýÓá£Èç¹û¸Ã¶ÔÏó¿ÉÄܻᾭ³£Ê¹Óõģ¬¾Í¾¡Á¿ÓÃÈíÒýÓá£Èç¹û¸Ã¶ÔÏó²»±»Ê¹ÓõĿÉÄÜÐÔ¸ü´óЩ£¬¾Í¿ÉÒÔÓÃÈõÒýÓá£

ËùÒÔÎÒÃǵóöÄÚ´æÐ¹Â©µÄÔ­Òò£º¶ÑÄÚ´æÖеij¤ÉúÃüÖÜÆÚµÄ¶ÔÏó³ÖÓжÌÉúÃüÖÜÆÚ¶ÔÏóµÄÇ¿/ÈíÒýÓ㬾¡¹Ü¶ÌÉúÃüÖÜÆÚ¶ÔÏóÒѾ­²»ÔÙÐèÒª£¬µ«ÊÇÒòΪ³¤ÉúÃüÖÜÆÚ¶ÔÏó³ÖÓÐËüµÄÒýÓöøµ¼Ö²»Äܱ»»ØÊÕ£¬Õâ¾ÍÊÇJavaÖÐÄÚ´æÐ¹Â¶µÄ¸ù±¾Ô­Òò¡£

ÄÚ´æÐ¹Â©µÄ¼ì²â

˵ÁËÄÇô¶à¹ØÓÚÄÚ´æ·ÖÅäµÄ֪ʶ£¬½ÓÏÂÀ´ÎÒÃǾͿ´¿´Android¸øÎÒÃÇÌṩÁËÄÄЩ¹¤¾ßÀ´½â¾öÄÚ´æÐ¹Â©µÄÎÊÌâ

Allocation Tracker(Device Monitor)

Allocation TrackerλÓÚAndroid Device MonitorÖÐ

Allocation TrackerÃæ°å

¸÷Ãû³ÆµÄº¬ÒåÈçÏÂ:

Allocation Tracker²Ù×÷

1.Ê×ÏȽøÈëÄãҪ׷×ٵĽçÃæ

2.µã»÷Start Tracking°´Å¥£¬¿ªÊ¼¸ú×ÙÄÚ´æ·ÖÅä¹ì¼£

3.²Ù×÷ÄãµÄ½çÃæ£¬¾¡Á¿Ê±¼ä¶Ìµã

4.µã»÷Get Allocations°´Å¥£¬×¥È¥ÄÚ´æ·ÖÅä¹ì¼£ÐÅÏ¢£¬ÏÔʾÔÚÓұߵÄÃæ°åÖУ¬Ä¬ÈÏÒÔÄÚ´æ´óСÅÅÐò£¬Äã¿ÉÒÔÒÔ·ÖÅä˳ÐòÅÅÐò»òÕßÈÔÒÔÁÐÅÅÐò¡£

5.logcatÖлáÏÔʾ³öÕâ´ÎµÄ¹ì¼£¹²×¥µ½ÄÚ´æ·ÖÅä¹ì¼£¼Ç¼Êý£¬¿ÉÒÔ¼òµ¥µÄÀí½â·ÖÅäÁ˶àÉÙ´ÎÄڴ棬Õâ¸öÊýÖµºÍAlloc orderµÄ×î´óÖµÊÇÏàµÈµÄ

6.Èç¹ûÄã²»Ïë¿´ÄÇô¶àÂÒÆß°ËÔãµÄ£¬Äã¿ÉÒÔʹÓÃFilterÀ´¹ýÂË£¬ÊäÈë°üÃû¾Í¿ÉÒÔÁË¡£

¸ú×ÙÄÚ´æ¹ì¼£

Èç¹ûÕâ¸öʱºòÎÒÃÇÏëµ¥¶À»ñȡij´Î²Ù×÷µÄÄÚ´æ¹ì¼££¬Ê×ÏÈÒ»¶¨Òª¼ÇµÃStop TrackingÔÙStart Trackingһϣ¬ÈÃ×·×Ùµã³õʼ»¯Ò»Ï£¬È»ºó¾Í½øÐÐÎÒÃÇÐèÒª¹Û²ìÄÚ´æ±ä»¯µÄ²Ù×÷£¬È»ºóµã»÷Get Allocations£¬Õâ¸öʱºòÎÒÃÇ´ÓÊ×Ò³½øÈëÒ»¸öÏêÇéÒ³,¿´Ò»ÏÂÎÒÃǵÄÄÚ´æ·ÖÅä¹ì¼££º

×·×Ùµ½µÄÄÚ´æ·ÖÅä20293´Î£¬¿´×ÅÊDz»ÊÇÓеãÎÞ´ÓÏÂÊÖ£¬Ã»¹ØÏµ£¬ÓÃFilter¹ýÂËÏÂ:

¹ýÂ˺󣬾ÍÊ£ÏÂÁ˸úÎÒÃÇAppÔ´ÂëÓйØÏµµÄ·ÖÅä¹ì¼££¬ÎÒÃÇËæ±ãÑ¡ÔñÒ»À¸£¬¿ÉÒÔ¿´µ½ÆätraceÐÅÏ¢:

ÉÏͼÖУ¬ÎÒÃÇ¿ÉÒÔ¿´³öÀ´£¬ÔÚµÚ635´ÎÄÚ´æ·ÖÅäÖУ¬·ÖÅäµÄÊÇIntroduceFragment¶ÔÏó£¬Õ¼ÓÃÄÚ´æ224×Ö½Ú£¬´¦ÀíÏß³ÌIdΪ3245£¬ÔÚjava.lang.ClassµÄnewInstance·½·¨ÖзÖÅäµÄ¡£´ÓtraceÐÅÏ¢¿ÉÒÔ¿´³öÀ´¸Ã·½·¨Ò»²½Ò»²½±»µ÷ÓõÄÐÅÏ¢¡£

DDMSµÄHeap Viewer

Heap ViewerÄÜ×öʲô£¿

ʵʱ²é¿´App·ÖÅäµÄÄÚ´æ´óСºÍ¿ÕÏÐÄÚ´æ´óС

·¢ÏÖMemory Leaks

ÔÚDevices ÖУ¬µã»÷Òª¼à¿ØµÄ³ÌÐò¡£

µã»÷DevicesÊÓͼ½çÃæÖÐ×îÉÏ·½Ò»ÅÅͼ±êÖеġ°Update Heap¡±

µã»÷HeapÊÓͼ

µã»÷HeapÊÓͼÖеġ°Cause GC¡±°´Å¥

µ½´ËΪֹÐè¼ì²âµÄ½ø³Ì¾Í¿ÉÒÔ±»¼àÊÓ¡£

°´ÉÏͼµÄ±ê¼Ç˳Ðò°´Ï£¬ÎÒÃǾÍÄÜ¿´µ½ÄÚ´æµÄ¾ßÌåÊý¾Ý£¬ÓÒ±ßÃæ°åÖÐÊýÖµ»áÔÚÿ´ÎGCʱ·¢Éú¸Ä±ä£¬°üÀ¨App×Ô¶¯´¥·¢»òÕßÄãÀ´ÊÖ¶¯´¥·¢¡£

ok£¬ÏÖÔÚÀ´½âÊÍÏÂÃæ°åÖеÄÃû´Ê

×ÜÀÀ

ÏêÇé

ÏÂÃæÊÇÿһ¸ö¶ÔÏó¶¼ÓеÄÁÐÃûº¬Ò壺

µ±ÎÒÃǵã»÷ijһÐÐʱ£¬¿ÉÒÔ¿´µ½ÈçϵÄÖù״ͼ£º

ºá×ø±êÊǶÔÏóµÄÄÚ´æ´óС£¬ÕâÐ©ÖµËæ×Ų»Í¬¶ÔÏóÊDz»Í¬µÄ£¬×Ý×ø±êÊÇÔÚij¸öÄÚ´æ´óСÉϵĶÔÏóµÄÊýÁ¿

Heap ViewerµÄʹÓÃ

ÎÒÃÇ˵Heap ViewerÊʺϷ¢ÏÖÄÚ´æÐ¹Â©µÄÎÊÌ⣬ÄÇôÈçºÎ¼ì²âÄØ£¿

ÄÇôÈçºÎ¼ì²âÄØ£¿

½øÈëijӦÓ㬲»¶ÏµÄ²Ù×÷¸ÃÓ¦Óã¬Í¬Ê±×¢Òâ¹Û²ìdata objectµÄTotal SizeÖµ£¬Õý³£Çé¿öÏÂTotal SizeÖµ¶¼»áÎȶ¨ÔÚÒ»¸öÓÐÏ޵ķ¶Î§ÄÚ£¬Ò²¾ÍÊÇ˵ÓÉÓÚ³ÌÐòÖеĵĴúÂëÁ¼ºÃ£¬Ã»ÓÐÔì³É¶ÔÏó²»±»À¬»ø»ØÊÕµÄÇé¿ö¡£

ËùÒÔ˵ËäÈ»ÎÒÃDz»¶ÏµÄ²Ù×÷»á²»¶ÏµÄÉú³ÉºÜ¶à¶ÔÏ󣬶øÔÚÐéÄâ»ú²»¶ÏµÄ½øÐÐGCµÄ¹ý³ÌÖУ¬ÕâЩ¶ÔÏó¶¼±»»ØÊÕÁË£¬ÄÚ´æÕ¼ÓÃÁ¿»á»áÂäµ½Ò»¸öÎȶ¨µÄˮƽ£»·´Ö®Èç¹û´úÂëÖдæÔÚûÓÐÊͷŶÔÏóÒýÓõÄÇé¿ö£¬Ôòdata objectµÄTotal SizeÖµÔÚÿ´ÎGCºó²»»áÓÐÃ÷ÏԵĻØÂä¡£Ëæ×ŲÙ×÷´ÎÊýµÄÔö¶àTotal SizeµÄÖµ»áÔ½À´Ô½´ó£¬Ö±µ½µ½´ïÒ»¸öÉÏÏÞºóµ¼Ö½ø³Ì±»É±µô¡£

MAT¹¤¾ß

ÄÇôͨ¹ýÉÏÃæDDMS¹¤¾ß£¬ÏÖÔÚÎÒÃÇÒѾ­¿ÉÒԱȽÏÇáËɵط¢ÏÖÓ¦ÓóÌÐòÖÐÊÇ·ñ´æÔÚÄÚ´æÐ¹Â¶µÄÏÖÏóÁË¡£

ÎÒÃÇÓ¦¸ÃÔõô¶¨Î»µ½¾ßÌåÊÇÄÄÀï³öµÄÄÚ´æÐ¹Â¶ÄØ£¿Õâ¾ÍÐèÒª½èÖúÒ»¸öÄÚ´æ·ÖÎö¹¤¾ßÁË£¬½Ð×öEclipse Memory Analyzer£¨MAT£©¡£ÏÂÔØµØÖ·ÊÇ£ºhttp://eclipse.org/mat/downloads.php¡£

ΪÁËʹÓøù¤¾ß£¬ÎÒÃÇÐèÒªhprofÎļþ¡£µ«ÊǸÃÎļþ²»ÄÜÖ±½Ó±»MATʹÓã¬ÐèÒª½øÐÐÒ»²½×ª»¯£¬¿ÉÒÔʹÓÃhprof-convÃüÁîÀ´×ª»¯£¬µ«ÊÇAndroid Studio¿ÉÒÔÖ±½Óת»¯,ת»¯·½·¨ÈçÏ£º

1.Ñ¡ÔñÒ»¸öhprofÎļþ£¬µã»÷ÓÒ¼üÑ¡ÔñExport to standard .hprofÑ¡Ïî¡£

2.Ìîд¸ü¸ÄºóµÄÎļþÃûºÍ·¾¶:

µã»÷OK°´Å¥ºó£¬MAT¹¤¾ßËùÐèµÄÎļþ¾ÍÉú³ÉÁË£¬ÏÂÃæÎÒÃÇÓÃMATÀ´´ò¿ª¸Ã¹¤¾ß:

1.´ò¿ªMATºóÑ¡ÔñFile->Open FileÑ¡ÔñÎÒÃǸղÅÉú³ÉµÄdoctorq.hprofÎļþ

2.Ñ¡Ôñ¸ÃÎļþºó£¬MAT»áÓм¸ÃëÖÖµÄʱ¼ä½âÎö¸ÃÎļþ£¬ÓеÄhprofÎļþ¿ÉÄܹý´ó£¬»áÓиü³¤µÄʱ¼ä½âÎö£¬½âÎöºó£¬Õ¹ÏÖÔÚÎÒÃǵÄÃæÇ°µÄ½çÃæÈçÏÂ:

ÉÏͼ×îÖÐÑëµÄÄǸö±ý״ͼչʾÁË×î´óµÄ¼¸¸ö¶ÔÏóËùÕ¼ÄÚ´æµÄ±ÈÀý£¬ÕâÕÅͼÖÐÌṩµÄÄÚÈݲ¢²»¶à£¬ÎÒÃÇ¿ÉÒÔºöÂÔËü¡£ÔÚÕâ¸ö±ý״ͼµÄÏ·½¾ÍÓм¸¸ö·Ç³£ÓÐÓõŤ¾ßÁË£¬ÎÒÃÇÀ´Ñ§Ï°Ò»Ï¡£

Histogram¿ÉÒÔÁгöÄÚ´æÖÐÿ¸ö¶ÔÏóµÄÃû×Ö¡¢ÊýÁ¿ÒÔ¼°´óС¡£

Dominator Tree»á½«ËùÓÐÄÚ´æÖеĶÔÏó°´´óС½øÐÐÅÅÐò£¬²¢ÇÒÎÒÃÇ¿ÉÒÔ·ÖÎö¶ÔÏóÖ®¼äµÄÒýÓýṹ¡£

ÏÖÔÚµã»÷Dominator Tree£¬½á¹ûÈçÏÂͼËùʾ£º

Ê×ÏÈRetained Heap±íʾÕâ¸ö¶ÔÏóÒÔ¼°ËüËù³ÖÓÐµÄÆäËüÒýÓ㨰üÀ¨Ö±½ÓºÍ¼ä½Ó£©ËùÕ¼µÄ×ÜÄڴ棬Òò´Ë´ÓÉÏͼÖп´£¬Ç°Á½ÐеÄRetained HeapÊÇ×î´óµÄ£¬ÎÒÃÇ·ÖÎöÄÚ´æÐ¹Â©Ê±£¬ÄÚ´æ×î´óµÄ¶ÔÏóÒ²ÊÇ×îÓ¦¸ÃÈ¥»³Òɵġ£

ÔÚÿһÐеÄ×î×ó±ß¶¼ÓÐÒ»¸öÎļþÐ͵Äͼ±ê£¬ÕâЩͼ±êÓеÄ×óϽǴøÓÐÒ»¸öµã£¬ÓеÄÔòûÓС£´øµãµÄ¶ÔÏó¾Í±íʾÊÇ¿ÉÒÔ±»GC Roots·ÃÎʵ½µÄ£¬¿ÉÒÔ±»GC Root·ÃÎʵ½µÄ¶ÔÏó¶¼ÊÇÎÞ·¨±»»ØÊյġ£ÄÇôÕâ¾Í˵Ã÷ËùÓдøºìÉ«µÄ¶ÔÏó¶¼ÊÇй©µÄ¶ÔÏóÂ𣿵±È»²»ÊÇ£¬ÒòΪÓÐЩ¶ÔÏóϵͳÐèҪһֱʹÓ㬱¾À´¾Í²»Ó¦¸Ã±»»ØÊÕ¡£ÎÒÃÇ¿ÉÒÔ×¢Òâµ½£¬ÉÏͼµ±ÖÐËùÓдøµãµÄ¶ÔÏó×îÓұ߶¼ÓÐдһ¸öSystem Class£¬ËµÃ÷ÕâÊÇÒ»¸öÓÉϵͳ¹ÜÀíµÄ¶ÔÏ󣬲¢²»ÊÇÓÉÎÒÃÇ×Ô¼º´´½¨²¢µ¼ÖÂÄÚ´æÐ¹Â©µÄ¶ÔÏó¡£

ÉÏͼµ±ÖУ¬³ýÁË´øÓÐSystem ClassµÄÐÐÖ®Í⣬×î´óµÄ¾ÍÊǵڶþÐеÄBitmap¶ÔÏóÁË£¬ËäÈ»Bitmap¶ÔÏóÏÖÔÚ²»Äܱ»GC Roots·ÃÎʵ½£¬µ«²»´ú±í×ÅBitmapËù³ÖÓÐµÄÆäËüÒýÓÃÒ²²»»á±»GC Roots·ÃÎʵ½¡£ÏÖÔÚÎÒÃÇ¿ÉÒÔ¶Ô×ŵڶþÐеã»÷ÓÒ¼ü -> Path to GC Roots -> exclude weak references£¬ÎªÊ²Ã´Ñ¡Ôñexclude weak referencesÄØ£¿ÒòΪÈõÒýÓÃÊDz»»á×èÖ¹¶ÔÏó±»À¬»ø»ØÊÕÆ÷»ØÊյģ¬ËùÒÔÎÒÃÇÕâÀïÖ±½Ó°ÑËüÅųýµô

¿ÉÒÔ¿´µ½£¬Bitmap¶ÔÏó¾­¹ý²ã²ãÒýÓÃÖ®ºó£¬µ½ÁËMainActivityLeakClassÕâ¸ö¶ÔÏó£¬È»ºóÔÚͼ±êµÄ×óϽÇÓиöµã£¬¾Í˵Ã÷ÔÚÕâÀï¿ÉÒÔ±»GCRoots·ÃÎʵ½ÁË£¬²¢ÇÒÕâÊÇÓÉÎÒÃÇ×Ô¼º´´½¨µÄThread£¬²¢²»ÊÇSystemClassÁË£¬ÄÇôÓÉÓÚMainActivityLeakClassÄܱ»GC Roots·ÃÎʵ½µ¼Ö²»Äܱ»»ØÊÕ£¬µ¼ÖÂËüËù³ÖÓÐµÄÆäËüÒýÓÃÒ²ÎÞ·¨±»»ØÊÕÁË£¬°üÀ¨MainActivity£¬Ò²°üÀ¨MainActivityÖÐËù°üº¬µÄͼƬ¡£

ͨ¹ýÕâÖÖ·½Ê½£¬ÎÒÃǾͳɹ¦µØ½«ÄÚ´æÐ¹Â©µÄÔ­ÒòÕÒ³öÀ´ÁË¡£

HistogramµÄÓ÷¨

ÓõÄ×î¶àµÄ¹¦ÄÜÊÇ Histogram,µã»÷ ActionsÏ嵀 HistogramÏµÃµ½ Histogram½á¹û£º

Ëü°´ÀàÃû½«ËùÓеÄʵÀý¶ÔÏóÁгöÀ´£¬¿ÉÒÔµã»÷±íÍ·½øÐÐÅÅÐò,ÔÚ±íµÄµÚÒ»ÐпÉÒÔÊäÈëÕýÔò±í´ïʽÀ´Æ¥Åä½á¹û :

ÔÚijһÏîÉÏÓÒ¼ü´ò¿ª²Ëµ¥Ñ¡Ôñ list objects ->with incoming refs ½«Áгö¸ÃÀàµÄʵÀý£º

ËüչʾÁ˶ÔÏó¼äµÄÒýÓùØÏµ£¬±ÈÈçÕ¹¿ªºóµÄµÚÒ»¸ö×ÓÏî±íʾÕâ¸ö HomePage(0x420ca5b0)±»HomePageContainer(0x420c9e40)ÖÐµÄ mHomePageÊôÐÔËùÒýÓÃ.

¿ìËÙÕÒ³öij¸öʵÀýû±»ÊͷŵÄÔ­Òò£¬¿ÉÒÔÓÒ½¡ Path to GC Roots¨C>exclue all phantom/weak/soft etc. reference :

µÃµ½µÄ½á¹ûÊÇ£º

´Ó±íÖпÉÒÔ¿´³ö PreferenceManager -> ¡­ ->HomePageÕâÌõÏß·¾ÍÒýÓÃ×ÅÕâ¸ö HomePageʵÀý¡£ÓÃÕâ¸ö·½·¨¿ÉÒÔ¿ìËÙÕÒµ½Ä³¸ö¶ÔÏóµÄ GC Root,Ò»¸ö´æÔÚ GC RootµÄ¶ÔÏóÊDz»»á±» GC»ØÊÕµôµÄ.

Histogram ¶Ô±È

Ϊ²éÕÒÄÚ´æÐ¹Â©£¬Í¨³£ÐèÒªÁ½¸ö Dump½á¹û×÷¶Ô±È£¬´ò¿ª Navigator HistoryÃæ°å£¬½«Á½¸ö±íµÄ Histogram½á¹û¶¼Ìí¼Óµ½ Compare BasketÖÐÈ¥ :

Ìí¼ÓºÃºó£¬´ò¿ª Compare BasketÃæ°å£¬µÃµ½½á¹û£º

µã»÷ÓÒÉÏ½ÇµÄ ! °´Å¥£¬½«µÃµ½±È¶Ô½á¹û£º

×¢Ò⣬ÉÏÃæÕâ¸ö¶Ô±È½á¹û²»ÀûÓÚ²éÕÒ²îÒ죬¿ÉÒÔµ÷Õû¶Ô±ÈÑ¡Ï

ÔٰѶԱȵĽá¹ûÅÅÐò£¬¾Í¿ÉµÃµ½Ö±¹ÛµÄ¶Ô±È½á¹û£º

Ò²¿ÉÒÔ¶Ô±ÈÁ½¸ö¶ÔÏ󼯺ϣ¬·½·¨Óë´ËÀàËÆ£¬¶¼Êǽ«Á½¸ö Dump½á¹ûÖеĶÔÏ󼯺ÏÌí¼Óµ½Compare BasketÖÐÈ¥¶Ô±È¡£ÕÒ³ö²îÒìºóÓà Histogram²éѯµÄ·½·¨ÕÒ³ö GC Root£¬¶¨Î»µ½¾ßÌåµÄij¸ö¶ÔÏóÉÏ¡£

LeakCanary

ÓбðÓÚMATºÍAndroidStudioÖÐMonitorsµÄʵʱÄÚ´æÕ¼ÓÃͼ£¬Ê¹ÓÃLeakCanary·ÖÎöÄÚ´æÐ¹Â¶¾Í¼òµ¥¶àÁËLeakCanaryÊÇSquare¿ªÔ´ÁËÒ»¸öÄÚ´æÐ¹Â¶×Ô¶¯Ì½²âÉñÆ÷ ¡£ÕâÊÇÏîÄ¿µÄgithub²Ö¿âµØÖ·£ºhttps://github.com/square/leakcanary ¡£Ê¹Ó÷dz£¼òµ¥£¬ÔÚbuild.gradleÖÐÒýÈë°üÒÀÀµ£º

debugCompile 'com.squareup.leakcanary:leakcanary-
android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-
android-no-op:1.5'
testCompile 'com.squareup.leakcanary:leakcanary-
android-no-op:1.5'
ÔÚApplicationÖеÄonCreate·½·¨ÖÐÔö¼Ó³õʼ»¯´úÂ룺
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for
// heap analysis.
// You should not init your app in this process.
return;
}
LeakCanary.install(this);

¼¯³Éºóʲô¶¼²»ÓÃ×ö£¬°´ÕÕÕý³£²âÊÔ£¬µ±ÓÐÄÚ´æÐ¹Â©·¢Éúºó£¬Ó¦Óûáͨ¹ýϵͳ֪ͨÀ¸·¢³ö֪ͨ£¬µã»÷֪ͨ¾Í¿ÉÒÔ½øÈë²é¿´ÄÚ´æÐ¹Â©µÄ¾ßÌåÐÅÏ¢¡£ÔÚÕâÀï¾Ù¸öʵ¼ùÖеÄÀý×Ó¡£°ÑLeakCanary¼¯³Éµ½ÏîÄ¿Öк󣬵ÈAppÆô¶¯ºóÒ»»á£¬ÏµÍ³Í¨Öªµ½ÁË£¬µã»÷֪ͨ£¬Ìø×ªµ½Ð¹Â©µÄÏêÇéÒ³Ãæ½øÐв鿴£º

ºÜÃ÷ÏÔ£¬WebSiteQueryActivityй¶ÁË¡£Ê×ÏÈ£¬static µÄMaskHeadView.fLayout±äÁ¿ÒýÓÃÁËFrameLayout.mContext¶ÔÏó£¬Õâ¸ö¶ÔÏóµÄÒýÓþÍÊÇÖ¸ÏòÁËWebSiteQueryActivityµÄʵÀý£¬µ¼ÖÂÁËËüµÄй©£¬ÔÚµÚ¶þ½ÚÖÐÎÒÃÇ˵¹ýstatic¶ÔÏóÊÇÄÚ²¿µÄstatic¶ÔÏóÊDZȽÏÈÝÒ×Ôì³ÉÄÚ´æÐ¹Â©µÄ£¬¼ì²é´úÂë·¢ÏÖ£¬MaskHeadViewÖ±½ÓÔÚWebSiteQueryActivityµÄxmlÎļþÖÐʹÓÃÁË£¬Òò´Ë³ÖÓÐWebSiteQueryActivityµÄʵÀý£¬ÒòΪfLayout¶ÔÏóÊǾ²Ì¬µÄ£¬Òò´ËËüµÄÉúÃüÖÜÆÚÓëApplicationͬÑù³¤£¬Òò´ËWebSiteQueryActivityÍ˳öºó£¬ËüµÄʵÀýÒýÓÃÒÀÈ»±»fLayout³ÖÓУ¬µ¼ÖÂËüÎÞ·¨±»»ØÊÕ´Ó¶øÄÚ´æÐ¹Â¶ÁË¡£×Ðϸ¼ì²é´úÂ룬·¢ÏÖfLayout²¢Ã»Óб»ÍⲿʹÓõ½£¬Ó¦¸ÃÊÇ֮ǰµÄ¿ª·¢ÕßÊÖ¶¶¼ÓÁ˸östatic×Ö¶ÎÉÏÈ¥»òÕßÊÇÏÖÔÚ²»ÓÃÁË£¬µ«ÊÇûÓÐÈ¥µô£¬ÔÚÕâÀïÎÒÖ±½ÓÈ¥µôÁËÕâ¸öÐÞÊηû£¬ÔÚ´Ëbuild´úÂ룬Õâ¸öÄÚ´æÐ¹Â©µÄÏÖÏóÏûʧÁË¡£

//È¥µôstaticÐÞÊηû£¬±ÜÃâstatic¶ÔÏóÒýÆðµÄÄÚ´æÐ¹Â©
private static FrameLayout fLayout;


public MaskHeadView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
initView(context);
}

private void initView(Context context2) {
view = LayoutInflater.from(context).inflate(R.layout.
mask_head_view, this);
fLayout=(FrameLayout) view.findViewById(R.id.
mask_container);
}

ÕâÖ»ÊǸö¼«¼òµ¥µÄÀý×Ó£¬µ«·½·¨ÊÇÒ»ÑùµÄ¡£Ë³±ãÌáÒ»¾ä£¬ÆäʵÎÞÂÛÊÇMAT¹¤¾ßµÄÄÚ´æ·ÖÎö£¬»¹ÊÇAndroidStudioÖÐ×Ô´øµÄ·ÖÎö¹¤¾ßÒà»òÊÇLeakCanary£¬Ô­Àí¶¼ÊÇÒ»ÑùµÄ£¬¶¼ÊÇdump Java heap³öÀ´½øÐзÖÎö£¬ÕÒµ½Ð¹Â©µÄÎÊÌ⣬ֻÊÇLeakCanary°ïÎÒÃǰѷÖÎöµÄ¹¤×÷×öÁË¡£µ«ÖµµÃÒ»ÌáµÄÊÇ£¬LeakCanary²¢²»ÊÇÍòÄܵģ¬ÓÐЩÄÚ´æÐ¹Â©£¬ËüÒ²ÎÞ·¨¼ì²â³öÀ´¡£

   
2232 ´Îä¯ÀÀ       31
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ