javaѧϰ֮·----ʲôÊÇjavaµÄÈõÒýÓÃ

2014-11-24 08:05:02 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 0

Java´Ó1.2°æ±¾¿ªÊ¼ÒýÈëÁË4ÖÖÒýÓã¬Õâ4ÖÖÒýÓõļ¶±ðÓɸߵ½µÍÒÀ´ÎΪ£º

Ç¿ÒýÓà > ÈíÒýÓà > ÈõÒýÓà > ÐéÒýÓÃ

¢ÅÇ¿ÒýÓã¨StrongReference£©
Ç¿ÒýÓÃÊÇʹÓÃ×îÆÕ±éµÄÒýÓá£Èç¹ûÒ»¸ö¶ÔÏó¾ßÓÐÇ¿ÒýÓã¬ÄÇÀ¬»ø»ØÊÕÆ÷¾ø²»»á»ØÊÕËü¡£µ±ÄÚ´æ¿Õ¼ä²»×㣬JavaÐéÄâ»úÄþÔ¸Å׳öOutOfMemoryError´íÎó£¬Ê¹³ÌÐòÒì³£ÖÕÖ¹£¬Ò²²»»á¿¿ËæÒâ»ØÊÕ¾ßÓÐÇ¿ÒýÓõĶÔÏóÀ´½â¾öÄÚ´æ²»×ãµÄÎÊÌâ¡£

¢ÆÈíÒýÓã¨SoftReference£©

Èç¹ûÒ»¸ö¶ÔÏóÖ»¾ßÓÐÈíÒýÓã¬ÔòÄÚ´æ¿Õ¼ä×ã¹»£¬À¬»ø»ØÊÕÆ÷¾Í²»»á»ØÊÕËü£»Èç¹ûÄÚ´æ¿Õ¼ä²»×ãÁË£¬¾Í»á»ØÊÕÕâЩ¶ÔÏóµÄÄÚ´æ¡£Ö»ÒªÀ¬»ø»ØÊÕÆ÷ûÓлØÊÕËü£¬¸Ã¶ÔÏó¾Í¿ÉÒÔ±»³ÌÐòʹÓá£ÈíÒýÓÿÉÓÃÀ´ÊµÏÖÄÚ´æÃô¸ÐµÄ¸ßËÙ»º´æ¡£

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

¢ÇÈõÒýÓã¨WeakReference£©

ÈõÒýÓÃÓëÈíÒýÓõÄÇø±ðÔÚÓÚ£ºÖ»¾ßÓÐÈõÒýÓõĶÔÏóÓµÓиü¶ÌÔݵÄÉúÃüÖÜÆÚ¡£ÔÚÀ¬»ø»ØÊÕÆ÷Ïß³ÌɨÃèËüËù¹ÜϽµÄÄÚ´æÇøÓòµÄ¹ý³ÌÖУ¬Ò»µ©·¢ÏÖÁËÖ»¾ßÓÐÈõÒýÓõĶÔÏ󣬲»¹Üµ±Ç°ÄÚ´æ¿Õ¼ä×ã¹»Óë·ñ£¬¶¼»á»ØÊÕËüµÄÄÚ´æ¡£²»¹ý£¬ÓÉÓÚÀ¬»ø»ØÊÕÆ÷ÊÇÒ»¸öÓÅÏȼ¶ºÜµÍµÄỊ̈߳¬Òò´Ë²»Ò»¶¨»áºÜ¿ì·¢ÏÖÄÇЩֻ¾ßÓÐÈõÒýÓõĶÔÏó¡£

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

¢ÈÐéÒýÓã¨PhantomReference£©

¡°ÐéÒýÓá±¹ËÃû˼Ò壬¾ÍÊÇÐÎͬÐéÉ裬ÓëÆäËû¼¸ÖÖÒýÓö¼²»Í¬£¬ÐéÒýÓò¢²»»á¾ö¶¨¶ÔÏóµÄÉúÃüÖÜÆÚ¡£Èç¹ûÒ»¸ö¶ÔÏó½ö³ÖÓÐÐéÒýÓã¬ÄÇôËü¾ÍºÍûÓÐÈκÎÒýÓÃÒ»Ñù£¬ÔÚÈκÎʱºò¶¼¿ÉÄܱ»À¬»ø»ØÊÕÆ÷»ØÊÕ¡£

ÐéÒýÓÃÖ÷ÒªÓÃÀ´¸ú×Ù¶ÔÏó±»À¬»ø»ØÊÕÆ÷»ØÊյĻ¡£ÐéÒýÓÃÓëÈíÒýÓúÍÈõÒýÓõÄÒ»¸öÇø±ðÔÚÓÚ£ºÐéÒýÓñØÐëºÍÒýÓöÓÁÐ £¨ReferenceQueue£©ÁªºÏʹÓᣵ±À¬»ø»ØÊÕÆ÷×¼±¸»ØÊÕÒ»¸ö¶ÔÏóʱ£¬Èç¹û·¢ÏÖËü»¹ÓÐÐéÒýÓ㬾ͻáÔÚ»ØÊÕ¶ÔÏóµÄÄÚ´æÖ®Ç°£¬°ÑÕâ¸öÐéÒýÓüÓÈëµ½ÓëÖ® ¹ØÁªµÄÒýÓöÓÁÐÖС£


ÓÉÓÚÒýÓúÍÄÚ´æ»ØÊÕ¹ØÏµ½ôÃÜ¡£ÏÂÃæ£¬ÏÈͨ¹ýʵÀý¶ÔÄÚ´æ»ØÊÕÓиöÈÏʶ£»È»ºó£¬½øÒ»²½Í¨¹ýÒýÓÃʵÀý¼ÓÉî¶ÔÒýÓõÄÁ˽⡣ ÎÒÃÇÊ×ÏÈÀ´½¨Á¢Ò»¸öÀࣺ public class MyDate extends Date{ public MyDate(){ } //ÎÒÃÇÀ´ÖØÐ´finalize£¬ÒòΪfinalizeº¯Êý ÔÚJvM»ØÊÕÄÚ´æµÄʱºò»áµ÷Ó㬵«ÊÇJVM²¢²»±£Ö¤»ØÊÕµÄʱºòÒ»¶¨»áµ÷Óà @Override protected void finalize() throws Throwable { super.finalize(); System. out.println( this .getTime()); }
@Override public String toString() { return "Date" + this.getTime(); } }
ÔÙÀ´½¨Á¢Ò»¸öÏûºÄÄÚ´æµÄ²âÊÔÀà
public class ReferenceTest { public ReferenceTest(){ } //Õâ¸ö·½·¨µÄÄ¿µÄÊÇÀ´ÏûºÄÄÚ´æ public static void drainMemory(){ String array[]= new String[1024*10]; for( int i=0;i<1024*10;i++){ for( int j='a' ;j<'z' ;j++){ array[i]=array[i]+( char)j; } } } }
ÎÒÃÇÏÂÃæÀ´·ÖÇé¿öÀ´²âÊÔÒ»ÏÂ
1.Çå³ý¶ÔÏó public class Test { public static void main(String[] args) { MyDate myDate= new MyDate(); myDate= null; }
}
½á¹ûÎÞÊä³ö
˵Ã÷date=null,µ«ÊÇJVM²¢Ã»ÓÐÖ´ÐÐÀ¬»ø»ØÊÕ²Ù×÷
2.ÏÔʾµÄµ÷ÓÃÀ¬»ø»ØÊÕ
public class Test { public static void main(String[] args) { MyDate myDate= new MyDate(); myDate= null; System. gc();//ÉèΪ¿Õºó£¬È¥×Ô¶¯µ÷ÓÃÀ¬»ø»ØÊÕ }
} ½á¹û£º 1386430828594
˵Ã÷À¬»ø»ØÊÕ»úÖÆµ÷ÓÃÁËfinalize()·½·¨
3.ÒþʽµÄµ÷ÓÃÀ¬»ø»ØÊÕ public class Test { public static void main(String[] args) { MyDate myDate= new MyDate(); myDate= null; ReferenceTest. drainMemory();//ÎÒÃÇÀ´Ôì³ÉÄÚ´æµÄ´óÁ¿ÏûºÄ }
}
½á¹û£º 1386431068074

˵Ã÷µ÷ÓÃÁËÀ¬»ø»ØÊÕ»úÖÆ£¨ÄÚ´æµÄ´óÁ¿ÏûºÄÔì³ÉÁËÀ¬»ø»ØÊÕ×Ô¶¯µ÷Óã©£¬ÎÒÃǵóö½áÂÛ£¬ÔÚÄÚ´æ³ä×ãµÄÇé¿öÏ£¬³ý·ÇÄãÏÔʾµÄµ÷ÓÃÀ¬»ø»ØÊÕ»úÖÆ£¬·ñÔòËü²»»á½øÐÐÀ¬»ø»ØÊÕ£¬ÔÚÄÚ´æ²»×ãµÄÇé¿öÏ£¬JVM»á×Ô¶¯µ÷ÓÃÀ¬»ø»ØÊÕ

ÎÒÃÇÔÚÀ´¿´¿´java¶ÔÒýÓõķÖÀà
Ç¿ÒýÓãº
public class Test { public static void main(String[] args) { MyDate myDate= new MyDate();//Ç¿ÒýÓà System. gc(); }
} ½á¹û£º ÎÞÊä³ö£¬ËµÃ÷ËäÈ»ÎÒÃÇÏÔʾµÄµ÷ÓÃÁËÀ¬»ø»ØÊÕ£¬µ«ÊÇmydateÊÇÇ¿ÒýÓã¬ËùÒÔ²»»á±»»ØÊÕ
ÈíÒýÓÃ
public class Test { public static void main(String[] args) { SoftReference ref = new SoftReference( new MyDate());//´´½¨Ò»¸öÈíÒýÓà ReferenceTest. drainMemory(); }
}
½á¹ûÎÞËù³ö£º
˵Ã÷ÔÚÄÚ´æ²»×ãµÄÇé¿öÏ£¬ÈíÒýÓûᱻֹͣ
ÈõÒýÓãº
public class Test { public static void main(String[] args) { WeakReference ref = new WeakReference( new MyDate()); ReferenceTest. drainMemory(); }
}
½á¹û£º 1386431868012
˵Ã÷ÔÚJÀ¬»ø»ØÊÕµÄʱºò£¬ÈõÒýÓñ»Í£Ö¹
ÐéÒýÓ㺠public class Test { public static void main(String[] args) { ReferenceQueue queue= new ReferenceQueue(); PhantomReference ref = new PhantomReference( new MyDate(), queue); //ReferenceTest.drainMemory(); System. gc(); }
} ½á¹û£º 1386432527842
˵Ã÷¶ÔÏóÔÚ´´½¨Íê³ÉÖ®ºó£¬¾Í±»À¬»ø»ØÊÕÁË