ºìÁªLinuxÃÅ»§
Linux°ïÖú

Java ÐÔÄÜÓÅ»¯µÄÎå´ó¼¼ÇÉ

·¢²¼Ê±¼ä:2016-12-14 10:30:20À´Ô´:ºìÁª×÷Õß:Ronny
Òª¶ÔÄãµÄ java ´úÂë½øÐÐÓÅ»¯£¬ÐèÒªÀí½â java ²»Í¬ÒªËØÖ®¼äµÄÏ໥×÷Óã¬ÒÔ¼°ËüÊÇÈçºÎÓëÆäÔËÐÐʱµÄ²Ù×÷ϵͳ½øÐн»»¥µÄ¡£Ê¹ÓÃÏÂÃæÕâÎå¸ö¼¼ÇɺÍ×ÊÔ´£¬¿ªÊ¼Ñ§Ï°ÈçºÎ·ÖÎöºÍÓÅ»¯ÄãµÄ´úÂë°É¡£
ÔÚÎÒÃÇ¿ªÊ¼Ö®Ç°, ÄãÒ²Ðí»áµ£ÐÄÐí¿ÉµÄÎÊÌâ. Java Ϊ Oracle ¹«Ë¾ËùÓУ¬×ñÑ­ Oracle µÄ BCL Ðí¿É£¬¸ÃÐí¿ÉÖ¤²»ÊÇÒ»¸öÃâ·Ñ/¿ªÔ´Ðí¿ÉÖ¤¡£¼´±ãÈç´Ë£¬ ÈÔÈ»ÓÐÐí¶à¿ªÔ´ÏîÄ¿ÓÉ Oracle ¹«Ë¾µÄ Java ¿ª·¢¡£ OpenJDK ÊÇ java ƽ̨×ÔÓÉÈí¼þµÄʵÏÖ£¬×ñÑ­ GPL v2 Ðí¿É¡£ (¸ü¶àÐÅÏ¢Çë²Î¼ûά»ù°Ù¿Æ Free Java implementations¡£)

ÈÃÎÒÃÇ¿ªÊ¼°É
ÐÔÄÜÓÅ»¯È¡¾öÓÚ¶à¸öÒòËØ£¬°üÀ¨À¬»øÊÕ¼¯¡¢ÐéÄâ»úºÍµ×²ã²Ù×÷ϵͳ£¨OS£©ÉèÖá£Óжà¸ö¹¤¾ß¿É¹©¿ª·¢ÈËÔ±½øÐзÖÎöºÍÓÅ»¯Ê±Ê¹Óã¬Äã¿ÉÒÔͨ¹ýÔĶÁ Java Tools for Source Code Optimization and Analysis À´Ñ§Ï°ºÍʹÓÃËüÃÇ¡£Èç¹ûÄãÕý¿à¿àÕõÔúÓÚÊõÓïºÍ Java µÄÔ­Àí£¬¿ÉÒÔÏÈÈ¥²é¿´ Livecoding Java category page£¬ÉÏÃæÓÐÖ±²¥£¬´æµµµÄÊÓÆµ£¬ÒÔ¼°Ò»Ð©ÆäËûÓÐÓõÄÐÅÏ¢¡£

ÊÓÇé¿ö¶ø¶¨
±ØÐëÒªÃ÷°×µÄÊÇ£¬Ã»ÓÐÁ½¸öÓ¦ÓóÌÐò¿ÉÒÔʹÓÃÏàͬµÄÓÅ»¯·½Ê½£¬Ò²Ã»ÓÐÍêÃÀµÄÓÅ»¯ java Ó¦ÓóÌÐòµÄ²Î¿¼Â·¾¶¡£Ê¹ÓÃ×î¼Ñʵ¼ù²¢ÇÒ¼á³Ö²ÉÓÃÊʵ±µÄ·½Ê½´¦ÀíÐÔÄÜÓÅ»¯¡£ÏëÒª´ïµ½ÕæÕý×î¸ßµÄÐÔÄÜÓÅ»¯£¬Äã×÷Ϊһ¸ö Java ¿ª·¢ÈËÔ±£¬ÐèÒª¶Ô Java ÐéÄâ»ú£¨JVM£©ºÍµ×²ã²Ù×÷ϵͳÓÐÕýÈ·µÄÀí½â£º

JVM ºÍµ×²ã²Ù×÷ϵͳ£ºJava ÐéÄâ»úÊÇÈκΠJava ³ÌÐòµÄ¼Ò¡£ÔĶÁ JVM internals guide Á˽â¸ü¶àÓйØÓÚ JVM ÄÚ²¿ºÍ²Ù×÷ϵͳ²îÒìµÄÄÚÈÝ¡£
JVM ·Ö²¼Ä£ÐÍ£ºJava ·Ö²¼Ä£ÐÍΪÄúµÄÓ¦ÓóÌÐò´¦Àí¶à¸öJVMʵÀý¡£·Ö²¼Ä£ÐÍÌá¸ßÁËÓ¦ÓóÌÐòµÄÐÔÄÜ£¬ÒòΪËü»ñµÃ¸ü¶àµÄ×ÊÔ´À´¹¤×÷¡£Äã¿ÉÒÔÓÃÁ½ÖÖ·½·¨¼ÌÐøÓÅ»¯¡£µÚÒ»ÖÖ·½·¨ÊÇÔÚÒ»¸ö¶Ñ´óСΪ2GB»ò8GBµÄµ¥·þÎñÆ÷ÔËÐжà¸ö JVM¡£µÚ¶þÖÖ·½·¨ÊÇÔÚ¶à¸ö·þÎñÆ÷ÉÏÔËÐе¥¸ö JVM¡£ÕýÈ··½·¨µÄÑ¡ÔñÈ¡¾öÓÚ¶à¸öÒòËØ£¬°üÀ¨¿ÉÓÃÐÔºÍÏìÓ¦ÐÔ¡£
JVM Ìåϵ½á¹¹£ºÑ¡ÔñÕýÈ·µÄ JVM Ìåϵ½á¹¹¶ÔÓÚÐÔÄÜÀ´ËµÊǺÜÖØÒªµÄ¡£Äã¿ÉÒÔÑ¡Ôñ 64 λ»òÕß 32 λµÄ JVM »úÆ÷¡£ Ò»°ãÀ´Ëµ£¬32 λ JVM µÄÐÔÄܱÈËü¶ÔÓ¦µÄ 64 λ JVM ÒªºÃ¡£ Ö»Óе±ÄãÐèÒªµÄ¶Ñ´óС´óÓÚ 3 GB ʱ£¬²ÅÑ¡Ôñ 64 λµÄ JVM¡£
Çå³þÁËÐÔÄÜÓÅ»¯ºÍÆäÒªËØ,ÏÖÔÚÎÒÃÇ¿ÉÒÔרעÓÚÄÇЩ¿ÉÒÔÓÅ»¯ÄãµÄJavaÓ¦Óõļ¼ÇÉ¡£

1.µ÷ÕûÀ¬»øÊÕ¼¯(GC)


ÓÉÓÚÀ¬»øÊÕ¼¯µÄ¸´ÔÓÐÔ,ºÜÄÑ·¢ÏÖÄãµÄÓ¦ÓõÄ׼ȷÐÔÄÜ¡£²»¹ý,Èç¹ûÄãÕæµÄÏëÓÅ»¯ÄãµÄÓ¦ÓÃ,ÄãÓ¦¸ÃÏàÓ¦µØ´¦ÀíÀ¬»øÊÕ¼¯.ͨÓõÄ×¼ÔòÊǵ÷ÕûGCÉèÖò¢Í¬Ê±Ö´ÐÐÐÔÄÜ·ÖÎö¡£Ò»µ©Äã¶Ô½á¹û¸Ðµ½ÂúÒâ,Äã¿ÉÒÔÍ£Ö¹¸Ã¹ý³Ì²¢Ñ°ÇóÆäËûÓÅ»¯·½Ê½.È·±£³ýÁËÔÚÆ½¾ùÊÂÎñ´¦Àíʱ¼äÖ®Íâ,Ä㻹ÁôÐÄÁËÒì³£Öµ.ÕâЩÒì³£ÖµÊÇÔì³ÉJavaÓ¦ÓûºÂýµÄÕæÕýµÄ×ï¿ý»öÊײ¢ÇÒºÜÄÑÕÒµ½¡£

´ËÍâ,ÄãÒªÃ÷°×Ó¦ÓÃÔËÐÐÆÚ¼äÐÔÄÜϽµµÄЧӦ.ÔÚÿµ¥¸öcpuʱÖÓÄڵĻºÂý²Ù×÷ÊÇ¿ÉÒÔºöÂÔµÄ,µ«ÔÚÿµ¥¸öÊý¾Ý¿âÊÂÎñÖеĻºÂý²Ù×÷ÔòÊǷdz£°º¹óµÄÏûºÄ.µ«ÊÇÄãÓ¦¸Ã¸ù¾ÝÐÔÄ̰ܶåÑ¡ÔñÄãµÄÓÅ»¯²ßÂÔ,²¢Ó¦¸Ã¸ù¾Ý¹¤×÷¸ºÔØÀ´ÓÅ»¯Ó¦Óá£

2.ÕýÈ·µØÑ¡ÔñÊʺÏÄãµÄGCËã·¨
ÈÃÎÒÃǸüÉîÈëµØÌ½ÌÖGCÓÅ»¯.±Ï¾¹,GCÓÅ»¯ÊÇÒª´¦ÀíµÄÕû¸öÓÅ»¯ÎÊÌâÖÐ×î»ù±¾µÄ.Ŀǰ,JavaÖÐÓÐËÄÖÖ¹©ÄãÑ¡ÔñµÄÀ¬»øÊÕ¼¯Ëã·¨.ÿÖÖËã·¨Âú×㲻ͬµÄÐèÇó,Òò´ËÄãҪѡÔñ(ÊʺÏÄãµÄÐèÇóµÄ).ºÜ¶à¿ª·¢ÈËÔ±ÕýÊÇÒòΪ²»Á˽âGCËã·¨¶øÎ´ÄÜÓÅ»¯ËûÃǵÄÓ¦Óá£

ÕâËĸöËã·¨·Ö±ðÊÇ´®ÐлØÊÕÆ÷,²¢ÐÐ/ÍÌÍÂÁ¿»ØÊÕÆ÷,CMS»ØÊÕÆ÷ºÍG1»ØÊÕÆ÷.ÏëÒªÁ˽â¸ü¶à¹ØÓÚÿÖÖÀ¬»øÊÕ¼¯Æ÷µÄÐÅÏ¢¼°ËüÃÇÊÇÈçºÎ¹¤×÷µÄ,Çë²é¿´ÕâÆªÀ´×ÔTakipi²©¿ÍµÄ·Ç³£°ôµÄÎÄÕÂGarbage Collectors--Serial vs. Parallel vs. CMS vs. G1. ÕâÆªÎÄÕÂͬʱ»¹ÌÖÂÛÁËJava8¶ÔGCËã·¨µÄÓ°Ïì¼°ÆäËûϸ½ÚÉϵĸıä.ÈÃÎÒÃÇÔٻص½GCËã·¨ÉÏ,¸ù¾ÝUnderstanding Java Garbage CollectionÕâÆªÎÄÕÂËùÊö,²¢·¢±ê¼ÇºÍÇå³ýGC(¼´"CMS")Ëã·¨²ÅÊÇÊʺÏÍøÂç·þÎñ¶ËÓ¦ÓõÄ×î¼ÑËã·¨.²¢ÐÐGCËã·¨ÊʺÏÄÇЩÄÚ²¿¿ÉÔ¤²âµÄÓ¦Óá£

G1ºÍCMSÊDz¢·¢²Ù×÷µÄÀíÏëÑ¡Ôñ,µ«ÈÔÈ»»áÒýÆð(Ó¦ÓÃ)Ƶ·±Í£¶Ù.ʵ¼ÊµÄÑ¡ÔñÈ¡¾öÓÚÄãÈçºÎÈ¡Éá.¾ÙÀýÀ´Ëµ,¾¡¹ÜÑ¡Ôñ²¢ÐÐËã·¨»á´øÀ´¸ü³¤µÄGCÍ£¶Ùʱ¼ä,µ«Ïà½ÏÓÚÆäËûGCËã·¨,Ñ¡Ôñ²¢ÐÐËã·¨ÈÔÊÇÒ»¸öºÃÖ÷Òâ¡£

3.Java ¶Ñ
JavaÄÚ´æ¶ÑÔÚÓ­ºÏÄÚ´æÐèÇó·½Ãæµ£ÈÎÁËÖÁ¹ØÖØÒª½ÇÉ«.ͨ³£¸üºÃµÄ×ö·¨Êdzõʼʱ·ÖÅä×îСµÄ¶Ñ,È»ºóͨ¹ý³ÖÐøµÄ²âÊÔ²»¶ÏÔö¼ÓËüµÄ´óС.´ó¶àÊýʱºòÓÅ»¯ÎÊÌâ¶¼¿ÉÒÔͨ¹ýÔö¼Ó¶ÑµÄ´óС½â¾ö,µ«Èç¹û´æÔÚ´óÁ¿µÄGC¿ªÏú,Ôò¸Ã½â¾ö·½°¸²»Æð×÷Óá£

GC¿ªÏú»¹»áʹÍÌÍÂÁ¿¼±¾çϽµ,½ø¶øÊ¹µÃÓ¦ÓÃÄÑÒÔÐÎÈݵÄÂý.´ËÍâ,¼°Ôçµ÷ÕûGC¿ÉÒÔ°ïÖúÄã±ÜÃâ¶Ñ´óС·ÖÅäµÄÎÊÌâ.¿ªÊ¼µÄʱºò,Äã¿ÉÒÔÑ¡ÔñÈκÎ1GBµ½8GBµÄ¶Ñ´óС.µ±ÄãÑ¡ÔñÕýÈ·µÄ¶Ñ´óС,ÀÏÉú´úºÍÐÂÉú´ú¶ÔÏóµÄ¸ÅÄîÒ²¾Í²»ÐèÒªÁË.×ܶøÑÔÖ®,¶Ñ´óСӦ¸ÃÈ¡¾öÓÚÀÏÉú´úºÍÐÂÉú´ú¶ÔÏóµÄ±ÈÂÊ,֮ǰµÄGCÓÅ»¯ºÍ¶ÔÏ󼯺Ï(¼´ËùÓжÔÏóÕ¼ÓõÄÄÚ´æ´óС)¡£


4.¹Ø¼üÓ¦ÓÃÓÅ»¯
¹Ø¼ü´úÂëÓÅ»¯ÊÇÓÅ»¯ÄãµÄJavaÓ¦ÓÃ×îºÃµÄ·½Ê½£¬Èç¹ûÄãµÄÓ¦ÓöÔGCºÍ¶ÑÓÅ»¯Ã»Óз´Ó¦,ÄÇô×îºÃÊÇ×ö¼Ü¹¹¸Ä½ø²¢¹Ø×¢ÓÚÄãµÄÓ¦ÓÃÊÇÈçºÎ´¦ÀíÐÅÏ¢µÄ.ʹÓôÏÃ÷µÄËã·¨²¢¹ÜÀíºÃ¶ÔÏó¾ÍÄܽâ¾ö´óÁ¿µÄÎÊÌâ,°üÀ¨ÄÚ´æË鯬,¶Ñ´óСÎÊÌâºÍÀ¬»øÊÕ¼¯µÄÎÊÌâ¡£

5.ʹÓÃ×îÓŵĺ¯Êý
JavaÌṩÁ˶à¸öº¯ÊýÀ´ÌáÉýË㷨ЧÂÊ£¬Èç¹ûÄãʹÓÃStringBuilder´úÌæ¼òµ¥µÄString,Äã¿ÉÒԵõ½Î¢ºõÆä΢µÄÐÔÄÜÌáÉý¡£²»¹ý,ÎÒÃÇ»¹ÓÐÆäËû·½Ê½ÔÚ´úÂë²ãÃæ½øÐÐÓÅ»¯£¬ÈÃÎÒÃÇ¿´¿´ÏÂÃæÕâЩÓÅ»¯·½·¨¡£

ʹÓÃStringBuilder´úÌæ+²Ù×÷·û¡£
±ÜÃâʹÓÃiterator()¡£
¶àʹÓÃÕ»´øÀ´µÄºÃ´¦.
±ÜÃâʹÓÃÕýÔò±í´ïʽ,ʹÓÃApache Commons Lang×÷Ϊ´úÌæ¡£
Ô¶ÀëµÝ¹é.µÝ¹é»áÕ¼ÓôóÁ¿×ÊÔ´!
²é¿´¸ü¶à¹ØÓÚ´úÂëµÄÓÅ»¯Top 10 Easy Performance. Optimisations in Java¡£

½áÂÛ
javaµÄÐÔÄÜÓÅ»¯¿ÉÊÇÒ»¸ö´ó¿ÎÌ⣬ ½å×ÅÕâÆ¬ÎÄÕÂÅ×שÒýÓñ¡£Èç¹ûÄúÈÏΪÎÄÕ»¹ÐèÒªÌí¼Ó²¹³ä£¬±ðÍüÁËÔÚÏÂÃæµÄÆÀÂÛÖзÖÏíÄúµÄ¹Ûµã¡£

±¾ÎĵØÖ·£ºhttp://www.linuxprobe.com/great-java-performance.html
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. Ronny ÓÚ 2016-12-14 10:30:52·¢±í:

    ѧJavaµÄ¿ì¹ýÀ´¿´¿´