Â̲èÈí¼þÔ°
×ÊѶÊ×Ò³> Èí¼þ½Ì³Ì> ±à³Ì¿ª·¢> ¸ßÐÔÄÜJAVA´úÂëÖ®ÄÚ´æ¹ÜÀí

¸ßÐÔÄÜJAVA´úÂëÖ®ÄÚ´æ¹ÜÀí

×÷ÕߣºØýÃûÀ´Ô´£ºÂ̲èÈí¼þÔ°2011-05-01 11:00:47

¡¡¡¡¸üÉõÕßÄãдµÄ´úÂ룬GC¸ù±¾¾Í»ØÊÕ²»ÁË£¬Ö±½Óϵͳ¹Òµô¡£GCÊÇÒ»¶Î³ÌÐò£¬²»ÊÇÖÇÄÜ£¬ËûÖ»»ØÊÕËûÈÏΪµÄÀ¬»ø£¬¶ø²»ÊÇ»ØÊÕÄãÈÏΪµÄÀ¬»ø¡£

  • PC°æ

jeditºº»¯°æ(java±à³Ì±à¼­Æ÷Èí¼þ)v5.3 µçÄÔ°æ

jeditºº»¯°æ(java±à³Ì±à¼­Æ÷Èí¼þ)v5.3 µçÄÔ°æ

´óС£º3.15MBÓïÑÔ£º¼òÌåÖÐÎÄ

ÀàÐÍ£º±à³Ì¿ª·¢µÈ¼¶£º

Á¢¼´ÏÂÔز鿴ÏêÇé

GCÀ¬»ø»ØÊÕ:

¡¡¡¡Grabage CollectionÏàÐÅѧ¹ýJAVAµÄÈ˶¼ÖªµÀÕâ¸öÊÇʲôÒâ˼.µ«ÊÇËûÊÇÈçºÎ¹¤×÷µÄÄØ?

¡¡¡¡Ê×ÏÈ£¬JVMÔÚ¹ÜÀíÄÚ´æµÄʱºò¶ÔÓÚ±äÁ¿µÄ¹ÜÀí×ÜÊÇ·ÖжÔÏóºÍÀ϶ÔÏó¡£Ð¶ÔÏóÒ²¾ÍÊÇ¿ª·¢Õßnew³öÀ´µÄ¶ÔÏ󣬵«ÊÇÓÉÓÚÉúÃüÖÜÆڶ̣¬ÄÇôËûÕ¼ÓõÄÄÚ´æ²¢²»ÊÇÂíÉÏÊÍ·Å£¬¶øÊDZ»±ê¼ÇΪÀ϶ÔÏó£¬Õâ¸öʱºò¸Ã¶ÔÏó»¹ÊÇÒª´æÔÚÒ»¶Îʱ¼ä¡£È»ºóÓÉJVM¾ö¶¨ËûÊÇ·ñÊÇÀ¬»ø¶ÔÏ󣬲¢½øÐлØÊÕ¡£

¡¡¡¡ËùÒÔÎÒÃÇ¿ÉÒÔÖªµÀ£¬À¬»øÄÚ´æ²¢²»ÊÇÓÃÍêÁËÂíÉϾͱ»ÊÍ·Å£¬ËùÒԾͻá²úÉúÄÚ´æÊͷŲ»¼°Ê±µÄÏÖÏ󣬴Ӷø½µµÍÁËÄÚ´æµÄʹÓ᣶øµ±³ÌÐòºÆ´óµÄʱºò¡£ÕâÖÖÏÖÏó¸üΪÃ÷ÏÔ£¬²¢ÇÒGCµÄ¹¤×÷Ò²ÊÇÐèÒªÏûºÄ×ÊÔ´µÄ¡£ËùÒÔ£¬Ò²¾Í»á²úÉúÄÚ´æÀË·Ñ¡£

JVMÖеĶÔÏóÉúÃüÖÜÆÚÀï̸ÄÚ´æ»ØÊÕ:

¡¡¡¡¶ÔÏóµÄÉúÃüÖÜÆÚÒ»°ã·ÖΪ7¸ö½×¶Î£º´´½¨½×¶Î£¬Ó¦Óý׶Σ¬²»¿ÉÊӽ׶Σ¬²»¿Éµ½´ï½×¶Î£¬¿ÉÊÕ¼¯½×¶Î£¬ÖÕ½á½×¶Î£¬ÊͷŽ׶Ρ£

¡¡¡¡´´½¨½×¶Î£ºÊ×ÏÈ´ó¼Ò¿´Ò»ÏÂ,ÈçÏÂÁ½¶Î´úÂë:

¡¡¡¡test1:

¡¡¡¡for( int i=0; i<10000; i++)

¡¡¡¡Object obj=new Object();

¡¡¡¡test2:

¡¡¡¡Object obj=null;

¡¡¡¡for( int i=0; i<10000; i++)

¡¡¡¡obj=new Object();

¡¡¡¡ÕâÁ½¶Î´úÂ붼ÊÇÏàͬµÄ¹¦ÄÜ£¬µ«ÊÇÏÔÈ»test2µÄÐÔÄÜÒª±Ètest1ÐÔÄÜÒªºÃ£¬ÄÚ´æʹÓÃÂÊÒª¸ß£¬ÕâÊÇΪʲôÄØ?Ô­ÒòºÜ¼òµ¥£¬test1ÿ´ÎÖ´ÐÐforÑ­»·¶¼Òª´´½¨Ò»¸öObjectµÄÁÙʱ¶ÔÏ󣬵«ÊÇÕâЩÁÙʱ¶ÔÏóÓÉÓÚJVMµÄGC²»ÄÜÂíÉÏÏú»Ù£¬ËùÒÔËûÃÇ»¹Òª´æÔںܳ¤Ê±¼ä£¬¶øtest2ÔòÖ»ÊÇÔÚÄÚ´æÖб£´æÒ»·Ý¶ÔÏóµÄÒýÓ㬶ø²»±Ø´´½¨´óÁ¿ÐÂÁÙʱ±äÁ¿£¬´Ó¶ø½µµÍÁËÄÚ´æµÄʹÓá£

¡¡¡¡ÁíÍâ²»Òª¶Ôͬһ¸ö¶ÔÏó³õʼ»¯¶à´Î¡£ÀýÈç:

¡¡¡¡public class A{

¡¡¡¡private Hashtable table = new Hashtable();

¡¡¡¡public A(){ table = new Hashtable();

¡¡¡¡// ÕâÀïÓ¦¸ÃÈ¥µô,ÒòΪtableÒѾ­±»³õʼ»¯.

¡¡¡¡}

¡¡¡¡}

¡¡¡¡ÕâÑù¾ÍnewÁËÁ½¸öHashtable£¬µ«ÊÇȴֻʹÓÃÁËÒ»¸ö¡£ÁíÍâÒ»¸öÔòûÓб»ÒýÓÃ.¶ø±»ºöÂÔµô.ÀË·ÑÁËÄÚ´æ.²¢ÇÒÓÉÓÚ½øÐÐÁËÁ½´Înew²Ù×÷.Ò²Ó°ÏìÁË´úÂëµÄÖ´ÐÐËٶȡ£

Ó¦Óý׶Σº¼´¸Ã¶ÔÏóÖÁÉÙÓÐÒ»¸öÒýÓÃÔÚά»¤Ëû.

¡¡¡¡²»¿ÉÊӽ׶Σº¼´³¬³ö¸Ã±äÁ¿µÄ×÷ÓÃÓò¡£ÕâÀïÓÐÒ»¸öºÜºÃµÄ×ö·¨,ÒòΪJVMÔÚGCµÄʱºò²¢²»ÊÇÂíÉϽøÐлØÊÕ,¶øÊÇÒªÅж϶ÔÏóÊÇ·ñ±»ÆäËûÒýÓÃÔÚά»¤.ËùÒÔ,Õâ¸öʱºòÈç¹ûÎÒÃÇÔÚʹÓÃÍêÒ»¸ö¶ÔÏóÒÔºó¶ÔÆäobj=null»òÕßobj.doSomething()²Ù×÷,½«Æä±ê¼ÇΪ¿Õ,¿ÉÒÔ°ïÖúJVM¼°Ê±·¢ÏÖÕâ¸öÀ¬»ø¶ÔÏó.

¡¡¡¡²»¿Éµ½´ï½×¶Î£º¾ÍÊÇÔÚJVMÖÐÕÒ²»µ½¶Ô¸Ã¶ÔÏóµÄÖ±½Ó»òÕß¼ä½ÓµÄÒýÓá£

¡¡¡¡¿ÉÊÕ¼¯½×¶Î,ÖÕ½á½×¶Î,ÊͷŽ׶Σº´ËΪ»ØÊÕÆ÷·¢ÏָöÔÏ󲻿ɵ½´ï,finalize·½·¨ÒѾ­±»Ö´ÐÐ,»òÕ߶ÔÏó¿Õ¼äÒѱ»ÖØÓõÄʱºò¡£

JAVAµÄÎö¹¹·½·¨:

¡¡¡¡¿ÉÄܲ»»áÓÐÈËÏàÐÅ,JAVAÓÐÎö¹¹º¯Êý? ÊǵÄ,ÓС£ÒòΪJAVAËùÓÐÀ඼¼Ì³ÐÖÁObjectÀà,¶øfinalize¾ÍÊÇObjectÀàµÄÒ»¸ö·½·¨,Õâ¸ö·½·¨ÔÚJAVAÖоÍÊÇÀàËÆÓÚC++Îö¹¹º¯Êý.Ò»°ãÀ´Ëµ¿ÉÒÔͨ¹ýÖØÔØfinalize·½·¨µÄÐÎʽ²ÅÊÍ·ÅÀàÖжÔÏó.Èç:

¡¡¡¡public class A{

¡¡¡¡public Object a;

¡¡¡¡public A(){ a = new Object ;}

¡¡¡¡protected void finalize() throws java.lang.Throwable{

¡¡¡¡a = null; // ±ê¼ÇΪ¿Õ,ÊͷŶÔÏó

¡¡¡¡super.finalize(); // µÝ¹éµ÷Óó¬ÀàÖеÄfinalize·½·¨.

¡¡¡¡}

¡¡¡¡}

¡¡¡¡µ±È»,ʲôʱºò¸Ã·½·¨±»µ÷ÓÃÊÇÓÉJVMÀ´¾ö¶¨µÄ.......................

¡¡¡¡Ò»°ãÀ´Ëµ,ÎÒÃÇÐèÒª´´½¨Ò»¸ödestoryµÄ·½·¨À´ÏÔʽµÄµ÷Óø÷½·¨.È»ºóÔÚfinalizeÒ²¶Ô¸Ã·½·¨½øÐе÷ÓÃ,ʵÏÖË«±£ÏÕµÄ×ö·¨.

¡¡¡¡ÓÉÓÚ¶ÔÏóµÄ´´½¨ÊǵݹéʽµÄ,Ò²¾ÍÊÇÏȵ÷Ó󬼶ÀàµÄ¹¹Ôì,È»ºóÒÀ´ÎÏòϵݹéµ÷Óù¹Ô캯Êý,ËùÒÔÓ¦¸Ã±ÜÃâÔÚÀàµÄ¹¹Ô캯ÊýÖгõʼ»¯±äÁ¿,ÕâÑù¿ÉÒÔ±ÜÃâ²»±ØÒªµÄ´´½¨¶ÔÏóÔì³É²»±ØÒªµÄÄÚ´æÏûºÄ.µ±È»ÕâÀïÒ²¾Í¿´³öÀ´½Ó¿ÚµÄÓÅÊÆ.

Êý×éµÄ´´½¨:

¡¡¡¡ÓÉÓÚÊý×éÐèÒª¸ø¶¨Ò»¸ö³¤¶È,ËùÒÔÔÚ²»È·¶¨Êý¾ÝÊýÁ¿µÄʱºò¾­³£»á´´½¨¹ý´ó,»ò¹ýСµÄÊý×éµÄÏÖÏó.Ôì³É²»±ØÒªµÄÄÚ´æÀË·Ñ,ËùÒÔ¿ÉÒÔͨ¹ýÈíÒýÓõķ½Ê½À´¸æËßJVM¼°Ê±»ØÊÕ¸ÃÄÚ´æ.(ÈíÒýÓÃ,¾ßÌå²é×ÊÁÏ).

¡¡¡¡ÀýÈç:

¡¡¡¡Object obj = new char[10000000000000000];

¡¡¡¡SoftReference ref = new SoftReference(obj);

¹²Ïí¾²Ì¬´æ´¢¿Õ¼ä:

¡¡¡¡ÎÒÃǶ¼ÖªµÀ¾²Ì¬±äÁ¿ÔÚ³ÌÐòÔËÐÐÆÚ¼äÆäÄÚ´æÊǹ²ÏíµÄ,Òò´ËÓÐʱºòΪÁ˽ÚÔ¼Äڴ湤¼þ,½«Ò»Ð©±äÁ¿ÉùÃ÷Ϊ¾²Ì¬±äÁ¿È·Êµ¿ÉÒÔÆðµ½½ÚÔ¼ÄÚ´æ¿Õ¼äµÄ×÷ÓÃ.µ«ÊÇÓÉÓÚ¾²Ì¬±äÁ¿ÉúÃüÖÜÆںܳ¤,²»Ò×±»ÏµÍ³»ØÊÕ,ËùÒÔʹÓþ²Ì¬±äÁ¿ÒªºÏÀí,²»ÄÜäĿµÄʹÓÃ.ÒÔÃâÊʵÃÆä·´¡£

Òò´Ë½¨ÒéÔÚÏÂÃæÇé¿öÏÂʹÓÃ:

¡¡¡¡1,±äÁ¿Ëù°üº¬µÄ¶ÔÏóÌå»ý½Ï´ó,Õ¼ÓÃÄÚ´æ¹ý¶à.

¡¡¡¡2,±äÁ¿Ëù°üº¬¶ÔÏóÉúÃüÖÜÆڽϳ¤.

¡¡¡¡3,±äÁ¿Ëù°üº¬Êý¾ÝÎȶ¨.

¡¡¡¡4,¸ÃÀàµÄ¶ÔÏóʵÀýÓжԸñäÁ¿Ëù°üº¬µÄ¶ÔÏóµÄ¹²ÏíÐèÇó.(Ò²¾ÍÊÇ˵ÊÇ·ñÐèÒª×÷Ϊȫ¾Ö±äÁ¿).

¶ÔÏóÖØÓÃÓëGC:

¡¡¡¡ÓеÄʱºò,ÈçÊý¾Ý¿â²Ù×÷¶ÔÏó,Ò»°ãÇé¿öÏÂÎÒÃǶ¼ÐèÒªÔÚ¸÷¸ö²»Í¬Ä£¿é¼äʹÓÃ,ËùÒÔÕâÑùµÄ¶ÔÏóÐèÒª½øÐÐÖØÓÃÒÔÌá¸ßÐÔÄÜ.Ò²ÓÐЧµÄ±ÜÃâÁË·´¸´´´½¨¶ÔÏóÒýÆðµÄÐÔÄÜϽµ.

¡¡¡¡Ò»°ãÀ´Ëµ¶ÔÏó³ØÊÇÒ»¸ö²»´íµÄ×¢Òâ.ÈçÏÂ:

¡¡¡¡public abstarct class ObjectPool{

¡¡¡¡private Hashtable locked,unlocked;

¡¡¡¡private long expirationTime;

¡¡¡¡abstract Object create();

¡¡¡¡abstract void expire( Object o);

¡¡¡¡abstract void validate( Object o);

¡¡¡¡synchronized Object getObject(){...};

¡¡¡¡synchronized void freeObject(Object o){...};

¡¡¡¡}

¡¡¡¡ÕâÑùÎÒÃǾÍÍê³ÉÁËÒ»¸ö¶ÔÏó³Ø,ÎÒÃÇ¿ÉÒÔ½«Í¨¹ý¶ÔÓ¦µÄ·½·¨À´´æȡɾ³ýËùÐè¶ÔÏó.À´Î¬»¤Õâ¿ìÄÚ´æÌá¸ßÄÚ´æÖØÓÃ.

¡¡¡¡µ±È»Ò²¿ÉÒÔͨ¹ýµ÷ÓÃSystem.gc()Ç¿ÖÆϵͳ½øÐÐÀ¬»ø»ØÊÕ²Ù×÷.µ±È»ÕâÑùµÄ´ú¼ÛÊÇÐèÒªÏûºÄһЩcpu×ÊÔ´.

²»ÒªÌáÇ°´´½¨¶ÔÏó:

¡¡¡¡¾¡Á¿ÔÚÐèÒªµÄʱºò´´½¨¶ÔÏó,Öظ´µÄ·ÖÅä,¹¹Ôì¶ÔÏó¿ÉÄÜ»áÒòΪÀ¬»ø»ØÊÕ×ö¶îÍâµÄ¹¤×÷½µµÍÐÔÄÜ.

JVMÄÚ´æ²ÎÊýµ÷ÓÅ:

¡¡¡¡Ç¿ÖÆÄÚ´æ»ØÊÕ¶ÔÓÚϵͳ×Ô¶¯µÄÄÚ´æ»ØÊÕ»úÖÆ»á²úÉú¸ºÃæÓ°Ïì,»á¼Ó´óϵͳ×Ô¶¯»ØÊյĴ¦Àíʱ¼ä,ËùÒÔÓ¦¸Ã¾¡Á¿±ÜÃâÏÔʽʹÓÃSystem.gc(),

¡¡¡¡JVMµÄÉèÖÿÉÒÔÌá¸ßϵͳµÄÐÔÄÜ.ÀýÈç:

¡¡¡¡java -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=8 -Xms512m -Xmx512m

¡¡¡¡¾ßÌå¿ÉÒԲ鿴java°ïÖúÎĵµ.ÎÒÃÇÖ÷Òª½éÉܳÌÐòÉè¼Æ·½ÃæµÄÐÔÄÜÌá¸ß.

JAVA³ÌÐòÉè¼ÆÖÐÓйØÄÚ´æ¹ÜÀíµÄÆäËû¾­Ñé:

¡¡¡¡¸ù¾ÝJVMÄÚ´æ¹ÜÀíµÄ¹¤×÷Ô­Àí,¿ÉÒÔͨ¹ýһЩ¼¼Çɺͷ½Ê½ÈÃJVM×öGC´¦Àíʱ¸ü¼ÓÓÐЧ.,´Ó¶øÌá¸ßÄÚ´æʹÓúÍËõ¶ÌGCµÄÖ´ÐÐʱ¼ä.

¡¡¡¡1,¾¡ÔçÊÍ·ÅÎÞÓöÔÏóµÄÒýÓÃ.¼´ÔÚ²»Ê¹ÓöÔÏóµÄÒýÓúóÉèÖÃΪ¿Õ,¿ÉÒÔ¼ÓËÙGCµÄ¹¤×÷.(µ±È»Èç¹ûÊÇ·µ»ØÖµ.....)

¡¡¡¡2,¾¡Á¿ÉÙÓÃfinalizeº¯Êý,´Ëº¯ÊýÊÇJAVA¸ø³ÌÐòÔ±ÌṩµÄÒ»¸öÊͷŶÔÏó»ò×ÊÔ´µÄ»ú»á,µ«ÊÇÈ´»á¼Ó´óGC¹¤×÷Á¿.

¡¡¡¡3,Èç¹ûÐèҪʹÓõ½Í¼Æ¬,¿ÉÒÔʹÓÃsoftÓ¦ÓÃÀàÐÍ,Ëü¿ÉÒÔ¾¡¿ÉÄܽ«Í¼Æ¬¶ÁÈëÄÚ´æ¶ø²»ÒýÆðOutOfMemory.

¡¡¡¡4,×¢Ò⼯ºÏÊý¾ÝÀàÐ͵ÄÊý¾Ý½á¹¹,ÍùÍùÊý¾Ý½á¹¹Ô½¸´ÔÓ,GC¹¤×÷Á¿¸ü´ó,´¦Àí¸ü¸´ÔÓ.

¡¡¡¡5,¾¡Á¿±ÜÃâÔÚĬÈϹ¹ÔìÆ÷(¹¹Ô캯Êý)Öд´½¨,³õʼ»¯´óÁ¿µÄ¶ÔÏó.

¡¡¡¡6,¾¡Á¿±ÜÃâÇ¿ÖÆϵͳ×öÀ¬»ø»ØÊÕ.»áÔö¼Óϵͳ×öÀ¬»ø»ØÊÕµÄ×îÖÕʱ¼ä½µµÍÐÔÄÜ.

¡¡¡¡7,¾¡Á¿±ÜÃâÏÔʽÉêÇëÊý×é,Èç¹û²»µÃ²»ÉêÇëÊý×éµÄ»°,Òª¾¡Á¿×¼È·¹ÀËãÊý×é´óС.

¡¡¡¡8,Èç¹ûÔÚ×öÔ¶³Ì·½·¨µ÷ÓÃ.Òª¾¡Á¿¼õÉÙ´«µÝµÄ¶ÔÏó´óС.»òÕßʹÓÃ˲¼äÖµ±ÜÃâ²»±ØÒªÊý¾ÝµÄ´«µÝ.

¡¡¡¡9,¾¡Á¿ÔÚºÏÊʵÄÇé¿öÏÂʹÓöÔÏó³ØÀ´Ìá¸ßϵͳÐÔÄܼõÉÙÄڴ濪Ïú,µ±È»,¶ÔÏó³Ø²»ÄܹýÓÚÅÓ´ó,»áÊʵÃÆä·´.

Â̲èÈí¼þ԰С±àÍƼöÔĶÁ£º

JavaÒýÓÃÓëCÖ¸ÕëµÄÇø±ð

7¸ö¸Ä±äÊÀ½çµÄJavaÏîÄ¿

  • ÈÈÃÅÈí¼þ
  • ÈÈÃűêÇ©
·µ»Ø¶¥²¿