ʲôÑùµÄjava´úÂëÈÝÒ×memory leak?
ºÜ¶àdeveloperÖªµÀjavaÒ²¿ÉÄÜmemory leak£¬¹ØÓÚÕâ¸öÖ÷ÌâÒѾÓкܶàÎÄÕÂÁË¡£ÎÒÕâÀïÖ»Ïë·ÖÏíÒ»ÏÂ×Ô¼ºµÄmemory leakµÄ¾Ñé¡£
˵Ã÷Ò»ÏÂÕâÀïÖ¸µÄmemory leakÊdzÌÐò²»¼°Ê±ÊÍ·Åheapµ¼ÖµÄOutOfMemoryError.
Ê×ÏÈÒ»ÖÖÇé¿öÊÇcollection»òÕßÊÇmapÒ»Ö±±»putÊý¾Ý£¬Ã»Óлú»áremove£¬µ¼ÖÂOutOfMemoryError¡£ÓÈÆäÊǵ±collection»òÕßÊÇmap±»Éè¼Æ³Éstatic±äÁ¿µÄʱºò£¬Ëü¾ÍÊǸöglobalÐÔÖʵıäÁ¿£¬ºÜ¿ÉÄÜÓÀÔ¶²»»á±»¸³Îªnull¡£ÕâÒ²ÊDz»½¨ÒéʹÓÃstatic±äÁ¿µÄÒ»¸öÔÒò¡£
ÓÐÈË»á²ì¾õµ½¾ÍËãcollection¸³Îªnull£¬ÔªËØ»¹ÊÇ¿ÉÄÜδ±»ÊÍ·Å£º
Object o= new Object ();
ArrayList<Object > l=new ArrayList<Object >();
l.add(o);
l=null;
System.out.println(o==null);// "false" will be printed
ÔÒòÔÚÓÚÕâ¸öo »¹ÊÇ¿ÉÄܱ»³ÌÐòreferenceµ½¡£¶øÒ»°ãÇé¿öÏÂÎÒÃÇÓöµ½µÄÊÇ:
l.add(new Object ());
ÔÚÕâÖÖÇé¿öÏ£¬l=null, oÒ²±»GCÁË¡£
ÎÒÒ²¿´µ½ÓÐÎÄÕÂÌáµ½ÔÚlistenerµÄģʽÏ£¬Èç¹ûlistenerÒ»Ö±ÔÚ×¢²áregister¶øÃ»Óлú»áremoveÒ²»áµ¼ÖÂOutOfMemoryError¡£ÆäʵlistenerÒ²ÊÇÒ»¸ölistµÄ½á¹¹£¬±¾ÖÊÉÏÊÇÒ»ÑùµÄ¡£ºÜ¶àlistenerÊÇÒÔÄäÃûÀà±»¹¹ÔìºÍ×¢²áµ½±»¼àÌýÀàÉÏÃæÈ¥µÄ£¬ ¶ø±»¼àÌýÀàÈç¹ûҲûÓÐÕýÈ·remove×¢²áµÄlistenerµÄ»°Ò²»áµ¼ÖÂOutOfMemoryError¡£
Ïà¹ØÎĵµ£º
1.1 ²»ÓÃnew¹Ø¼ü´Ê´´½¨ÀàµÄʵÀý
ÓÃnew¹Ø¼ü´Ê´´½¨ÀàµÄʵÀýʱ£¬¹¹Ô캯ÊýÁ´ÖеÄËùÓй¹Ô캯Êý¶¼»á±»×Ô¶¯µ÷Óᣵ«Èç¹ûÒ»¸ö¶ÔÏóʵÏÖÁËCloneable½Ó¿Ú£¬ÎÒÃÇ¿ÉÒÔµ÷ÓÃËüµÄclone()·½·¨¡£clone()·½·¨²»»áµ÷ÓÃÈκÎÀ๹Ô캯Êý¡£
ÔÚʹÓÃÉè¼ÆÄ£Ê½£¨Design Pattern£©µÄ³¡ºÏ£¬Èç¹ûÓÃFactoryģʽ´´½¨¶ÔÏó£¬Ôò¸ÄÓÃclone()·½·¨´´½¨Ðµ ......
java¶à̬µÄ2ÖÖ±íÏÖÐÎʽ ·½·¨ÖØÔغͷ½·¨¸²¸Ç
·½·¨ÖØÔØ£ºÍ¬Ò»¸öÀàÖУ¬·½·¨ÃûÏàͬ£¬²ÎÊýÁÐ±í²»Í¬µÄ2¸ö»ò¶à¸ö·½·¨¹¹³É·½·¨µÄÖØÔØ¡£
·½·¨¸²¸Ç£º×ÓÀàÖØÐÂʵÏÖÁ˸¸ÀàÖеķ½·¨¡£
·½·¨ÖØÔØ
/**
* ·½·¨ÖØÔØÂú×ãµÄÌõ¼þ
* ͬһ¸öÀàÖУ¬·½·¨ÃûÏàͬ£¬²ÎÊýÁÐ±í²»Í¬µÄ2¸ö»ò¶à¸ö·½·¨¹¹³É·½·¨µÄÖØÔØ
* ²ÎÊýÁÐ±í²»Í¬Ö¸²ÎÊýµÄÀàÐÍ£¬²Î ......
/*****************TestCar1 begin************************/
public class TestCar1 {
public static final int Ok=1; //Õý³£Çé¿ö
public static final int Wrong=2; //Òì³£Çé¿ö
public int run(){
if("³µ×ÓûÓгöÏÖ¹ÊÕÏ"){  ......
±àÒë²¢ÔËÐÐÏÂÃæµÄ³ÌÐò£¬Æä½á¹ûÊÇʲô£¿
¡¡¡¡public class MyClass {
¡¡¡¡public static void main(String[] args) {
¡¡¡¡String str1 = "str1";
¡¡¡¡String str2 = "str2";
¡¡¡¡String str3 = "str3";
¡¡¡¡str1.concat(str2);
¡¡¡¡System.out.println(str3.concat(str1));
¡¡¡¡}
¡¡¡¡}
¡¡¡¡ÇëÑ¡ÔñÕýÈ·µÄ´ð°¸¡£
......
String srt="abc?abc";
str.replaceAll("?", "#");
»áÌáʾÕâÑùµÄ´íÎó
Dangling meta character '?' near index 0
?
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compi ......