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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
JavaÖÐÓ°Ïì·½·¨µ÷ÓÃÐÔÄܵÄÒòËØ
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-01
 

ÎÒÃÇÏÈ´ÓÒ»¸öС¹ÊÊ¿ªÊ¼½²Æð¡£¼¸¸öÐÇÆÚǰ£¬ÎÒÔÚJavaºËÐÄ¿âµÄÓʼþÁбíÖз¢ÆðÒ»¸öÐ޸ĵÄÌáÒ飬ϣÍûÄÜÖØÐ´Ò»Ð©Ä¿Ç°ÊÇfinalÀàÐ͵ķ½·¨¡£Õâ¸öÌá°¸Òý·¢Á˺ü¸¸öÌÖÂ۵ϰÌ⡪¡ªÆäÖÐÒ»¸öÊÇ·½·¨ÊDz»ÊÇfinalÀàÐ͵ģ¬ËüµÄÐÔÄܲî¾àµ½µ×Óжà´ó¡£

¹ØÓÚÈ¡ÏûfinalÊÇ·ñ»áµ¼µ½ÐÔÄܱä²îÎÒÆäʵÓÐһЩ×Ô¼ºÏë·¨£¬µ«ÎÒ¾ö¶¨ÏÈÅ׿ªÕâЩÖ÷¹Û¿´·¨£¬ÏëÕÒÕÒ¿´ÓÐûÓÐÕâ¸ö¿ÎÌâÏà¹ØµÄһЩ»ù×¼²âÊÔµÄÊý¾Ý¡£ºÜ²»ÐÒµÄÊÇÎÒûÕÒµ½¡£²¢²»ÊÇËµÕæµÄ²»´æÔÚ»òÕßûÓÐÈËÑо¿¹ýÕâÖÖÇé¿ö£¬Ö»ÄÜ˵ÎÒûÓп´µ½Óй«¿ªµÄͬÐÐÉó²é¹ýµÄ´úÂë¡£¿´À´£¬µÃ×Ô¼ºÐ´µã²âÊÔÁË¡£

»ù×¼²âÊÔ·½·¨ÂÛ

ÎÒ¾ö¶¨Ê¹ÓÃJMHÕâ¸ö¿¿Æ×µÄ¿ò¼ÜÀ´½«ÕâЩ»ù×¼²âÊÔ½øÐдò°ü¡£Èç¹ûÄã²»ÏàÐÅ»áÓпò¼ÜÄܰïÖúÄãµÃµ½¾«È·µÄ»ù×¼²âÊÔµÄÊý¾Ý£¬ÄãÓ¦¸Ã¿´ÏÂAleksey ShipilevµÄÕâ¸öÑݽ²£¬ËûÊÇÕâ¸ö¿ò¼ÜµÄ×÷Õߣ¬»òÕß¿´Ï Nitsan WakartµÄÕâÆªºÜÔ޵IJ©ÎÄ£¬ÀïÃæÏêϸ½âÊÍÁ˾ßÌåµÄÔ­Òò¡£

¶ÔÎÒ¶øÑÔ£¬ÎÒÏëÖªµÀµÄÊÇʲôÒòËØ»áÓ°Ïìµ½·½·¨µ÷ÓõÄÐÔÄÜ¡£ÎÒ¾ö¶¨Ê¹Óò»Í¬µÄ·½Ê½À´½øÐз½·¨µ÷Ó㬲¢²âÁ¿ÏÂËüÃǸ÷×ԵĿªÏú¡£ÎÒÕâÓÐÒ»×é»ù×¼²âÊÔ£¬Ã¿´ÎÖ»µ÷ÕûÆäÖеÄÒ»¸öÒòËØ£¬ÕâÑùÎÒÃÇ¿ÉÒÔ¸ãÇå³þ²»Í¬µÄÒòËØ»òÕß²»Í¬ÒòËØµÄ×éºÏµ½µ×»á¶Ô·½·¨µ÷ÓõĿªÏú²úÉúÔõÑùµÄÓ°Ïì¡£

ÄÚÁª

×îÃ÷ÏÔµ«Í¬Ê±ÓÖ×î²»Ã÷ÏÔµÄÒòËØµ±È»¾ÍÊǵ½µ×ÓÐûÓвúÉú·½·¨µ÷ÓᣱàÒëÆ÷ÊÇÓпÉÄܽ«Õû¸ö·½·¨µ÷ÓõĿªÏúÈ«¶¼¶¼ÓÅ»¯µôµÄ¡£Ò»°ãÀ´Ëµ£¬ÓÐÁ½ÖÖ¼õÉÙµ÷ÓÿªÏúµÄ·½·¨¡£Ò»¸öÊÇÖ±½Ó½«·½·¨±¾ÉíÄÚÁª£¬ÁíÍâÒ»ÖÖÊÇʹÓÃÄÚÁª»º´æ¡£±ðµ£ÐÄ¡ª¡ªÕâÖ»ÊÇЩºÜ¼òµ¥µÄ¸ÅÄî¶øÒÑ£¬Ö»²»¹ýÀïÃæÓõ½µÄһЩÊõÓï¿ÉÄÜÐèÒª½éÉÜÏ¡£ÎÒÃÇÏȼÙÉèÓÐÒ»¸ö½ÐFooµÄÀ࣬ËüÀïÃæ¶¨ÒåÁËÒ»¸öbar·½·¨¡£

class Foo {
void bar() { ... }
}

µ÷ÓÃÕâ¸öbar·½·¨µÄ»°¿ÉÒÔÕâôд£º

Foo foo = new Foo();
foo.bar();

ÕâÀïÖØÒªµÄÔÚÓÚbar·½·¨Êµ¼Ê²úÉúµ÷ÓõÄλÖ᪡ªfoo.bar()£¬Õâ¸ö±»³Æ×÷µ÷Óõ㣨callsite£©¡£µ±ÎÒÃÇ˵һ¸ö·½·¨±»¡°ÄÚÁª¡±ÁË£¬ËüµÄÒâ˼ÊÇ·½·¨Ìå±»ÄóöÀ´Èûµ½ÁËÕâ¸öµ÷ÓõãÕâÀÕû¸öÌæ»»µôÁËÕâ´Î·½·¨µ÷Ó᣶ÔÓÚÄÇЩ°üº¬ºÜ¶àСµÄ·½·¨µÄ³ÌÐòÀ´Ëµ£¨ÎÒ¸Ò˵£¬ÕâÊǸöÕýÈ··Ö½âÈÎÎñµÄ³ÌÐò£©£¬·½·¨ÄÚÁªÄÜÏÔÖøµØÌáÉý³ÌÐòµÄÔËÐÐËÙ¶È¡£ÕâÊÇÒòΪ³ÌÐò²»»á»¨Ì«¶àµÄʱºò½øÐз½·¨µ÷Óöø²»ÊÇÔÚ¸Éʵ¼ÊµÄ¹¤×÷£¡ÎÒÃÇ¿ÉÒÔͨ¹ý@CompilerControl×¢½âÀ´¿ØÖÆÊÇ·ñÒªÄÚÁªÒ»¸ö·½·¨¡£ºóÃæÎÒÃǻὲµ½Ê²Ã´ÊÇÄÚÁª»º´æ¡£

Àà²ã´ÎµÄÉî¶È¼°·½·¨µÄÖØÐ´

Èç¹ûÎÒÃÇÑ¡ÔñÒÆ³ý·½·¨µÄfinal¹Ø¼ü×Ö£¬ÕâÒâζÎÒÃÇ¿ÉÒÔ¶ÔËü½øÐÐÖØÐ´ÁË¡£ÕâÊÇÁíÒ»¸öÎÒÃÇÐèÒª¿¼ÂǵÄÒòËØ¡£ÒòЩÎÒÔÚÒ»¸öÀàµÄ²»Í¬µÄ²ã¼¶Éϵ÷ÓÃËüµÄ·½·¨£¬Í¬Ê±ÔÚ²»Í¬µÄ²ã¼¶É϶ÔËüÃǽøÐÐÖØÐ´£¬ÕâÑùÎÒ²ÅÄÜŪÇå³þÀàµÄÉî¶ÈºÍÖØÐ´µ½µ×»á²úÉú¶à´óµÄ¿ªÏú¡£

¶à̬

ÔÚÇ°ÃæÎÒÌáµ½µ÷ÓõãµÄʱºò£¬ÎÒ¹ÊÒ⩵ôÁËÒ»¸öºÜÖØÒªµÄϸ½Ú¡£ÓÉÓÚ¿ÉÒÔÔÚ×ÓÀàÖÐÖØÐ´·Çfinal·½·¨£¬ÎÒÃǵĵ÷Óõã¿ÉÄÜ×îÖÕ»áµ÷Óõ½²»Í¬µÄ·½·¨¡£ÄÇô¿ÉÄÜÎÒ´«µÄÊÇFoo¶ÔÏó»òÕßÊÇËüµÄ×ÓÀࡪ¡ªBaz¡ª¡ªËüҲʵÏÖÁËbar()·½·¨¡£ÄDZàÒëÆ÷Ôõô֪µÀ¸Ãµ÷ÓÃÄĸö·½·¨ÄØ£¿JavaÖеķ½·¨Ä¬È϶¼ÊÇÐé·½·¨£¨¿ÉÖØÐ´µÄ£©£¬Ò²¾ÍÊÇ˵ÿ´Î·½·¨µ÷Óö¼µÃÔÚÒ»ÕűíÖвéÕÒºÏÊʵķ½·¨£¬Õâ¸ö±í³ÆÎªÐé·½·¨±í¡£Õâ¸ö¹ý³ÌÊÇÏ൱ÂýµÄ£¬Òò´ËºÃµÄ±àÒëÆ÷¶¼»á³¢ÊÔÈ¥¼õÉÙÕâ¸ö²éÕҵĿªÏú¡£ÎÒÃÇ֮ǰÌáµ½µÄÒ»¸ö·½·¨ÊÇÄÚÁª£¬Èç¹ûÄãµÄ±àÒëÆ÷Äܹ»È·¶¨ÔÚÒ»¸öÖ¸¶¨µÄµ÷ÓõãÖ»»áµ÷Óõ½Ä³¸ö·½·¨µÄ»°ÄǾÍÌ«°ôÁË¡£ÕâÑùµÄµ÷Óõ㱻³Æ×÷µ¥Ì¬µ÷Óõ㡣

²»ÐÒµÄÊÇÒªÖ¤Ã÷Ò»¸öµ÷ÓõãÊǵ¥Ì¬µÄËù»¨·ÑµÄʱ¼ä´ó¶à¶¼ÊDz»ÇÐʵ¼ÊµÄ¡£JIT±àÒëÆ÷ÇãÏòÓÚ²ÉÓÃÁíÒ»ÖÖ·½·¨£¬Ëü»áͳ¼Æ¸÷¸öµ÷Óõãʵ¼Êµ÷ÓõÄÀàÐÍ£¬Èç¹ûǰN¸öµ÷Óö¼Êǵ¥Ì¬µÄ£¬ÄÇËü¾Í»á²Â²âÕâ¸öµ÷Óõã¿ÉÄÜÒ»Ö±¶¼Êǵ¥Ì¬µÄ¡£Õâ¸öͶ»úʽµÄÓÅ»¯Í¨³£À´Ëµ¶¼ÊÇÕýÈ·µÄ£¬µ«ÓÉÓÚËü²¢²»È«ÊǶԵģ¬Òò´Ë±àÒëÆ÷ÐèÒª·½·¨µ÷ÓÃǰ²åÈëÒ»¸öÊØÎÀ£¬ÒÔ±ã¼ì²éÕâ¸ö·½·¨µÄÀàÐÍ¡£

ÎÒÃÇÏëÒªÓÅ»¯µÄ¿É²»Ö¹µ¥Ì¬µ÷ÓõãÒ»¸ö¶øÒÑ¡£Óкܶàµ÷ÓõãרҵµãµÄ»°½Ð×ö˫̬¡ª¡ªËü¿ÉÄÜ»áµ÷Óõ½Á½¸ö·½·¨¡£Äã¿ÉÒÔʹÓÃÄãµÄÊØÎÀ´úÂëÀ´ÅжÏÓ¦¸Ãµ÷ÓÃÄĸö·½·¨£¬È»ºóÌø×ª¹ýÈ¥¡£Õâ±ÈÍêÕûµÄ·½·¨µ÷ÓÿÉÒªÁ®¼Û¶àÁË¡£ÕâÖÖÇé¿öÒ²¿ÉÒÔʹÓÃÄÚÁª»º´æÀ´½øÐÐÓÅ»¯¡£ÄÚÁª»º´æ²¢²»ÊÇʵ¼Ê½«·½·¨ÌåÄÚÁªµ½µ÷Óõ㣬¶øÊÇʹÓÃÁËÒ»¸öרÃŵÄÌø×ª±í£¬Ëü¾ÍÏñÊÇÒ»¸öÍêÕûµÄÐé·½·¨±í²éѯµÄ»º´æ¡£HotSpotµÄJIT±àÒëÆ÷Ö§³Ö˫̬ÄÚÁª»º´æ£¬Ëü½«ÄÇЩÓÐÈý¸öÒÔÉÏ¿ÉÄܵÄʵÏֵĵ÷ÓÃµã³ÆÎª¡±Õ×̬¡°£¨megamorphic£©¡£

ÏÖÔÚÎÒÃÇÇø·Ö³öÁËÈýÖÖÐèÒª½øÐлù×¼²âÊԺͷÖÎöµÄµ÷Ó÷½Ê½£ºµ¥Ì¬£¬Ë«Ì¬£¬¼°Õ×̬¡£

²âÊÔ½á¹û

ÎÒÃǽ«²âÊÔ½á¹û½øÐзÖ×éÊÕ¼¯£¬ÕâÑùÄܸüÈÝÒ׿´ÇåÎÊÌâµÄ±¾ÖÊ¡£ÎÒ°ÑԭʼÊý¾ÝÁÐÁ˳öÀ´£¬Í¬Ê±»¹¸½´øÁËÒ»µã·ÖÎö¡£¾ßÌåµÄÊý×Ö»òÕß¿ªÏúÒâÒåÆäʵ²¢²»ÊÇÌØ±ð´ó¡£µ«ÓÐȤµÄÊDz»Í¬µÄ·½·¨µ÷ÓüäµÄ±ÈÂÊÒÔ¼°ÏàÓ¦µÄ±ê×¼Îó²î¶¼·Ç³£µÄµÍ¡£²»Í¬µ÷ÓõÄÇø±ð·Ç³£Ã÷ÏÔ¡ª¡ª×î¿ìºÍ×îÂýµÄʵÏÖ²îÁË6.26±¶¡£ÏÖʵÖÐÕâÖÖ²î¾à¿ÉÄܸü´ó£¬ÒòΪÕâÀïÎÒÃDzâÁ¿µÄÊÇÒ»¸ö¿Õ·½·¨µÄ¿ªÏú¡£

ÕâЩ»ù×¼²âÊÔµÄÔ´´úÂëÔÚGitHubÉÏÓС£ÎÒûÓаѽá¹û¶¼·Åµ½ÆðÒÔÃâ²úÉú»ìÏý¡£¶à̬µÄ»ù×¼²âÊÔÊÇÔËÐÐPolymorphicBenchmarkµÄ½á¹û£¬¶øÆäËüµÄÊÇÔËÐÐJavaFinalBenchmarkµÄ½á¹û¡£

¼òµ¥µ÷Óõã

ÎÒÃǵĵÚÒ»×éÊý¾Ý±È½ÏµÄÊÇÐé·½·¨£¬final·½·¨£¬ÒÔ¼°Ò»¸öÔÚºÜÉîµÄÀà²ã´ÎÖнøÐÐÖØÐ´µÄ·½·¨¼äµÄµ÷ÓÿªÏú¡£×¢Ò⣬ÎÒÃÇÕâÀïÇ¿ÖÆÈñàÒëÆ÷²»½øÐÐÄÚÁª¡£ÎÒÃÇ¿ÉÒÔ¿´µ½£¬ËüÃÇÖ®¼äµÄ²î±ð·Ç³£Ð¡£¬±ê×¼Îó²îÒ²ºÜµÍ¡£Òò´ËÎÒÃÇ¿ÉÒԵóöÕâÑùµÄ½áÂÛ£¬¼òµ¥µÄ¼ÓÒ»¸öfinal¹Ø¼ü×ÖÆäʵ²»»á¶Ô·½·¨µ÷ÓõÄÐÔÄÜÓÐÌ«´óµÄÌáÉý¡£Í¬ÑùµÄ£¬ÖØÐ´·½·¨Ò²²»»á²úÉúÌ«´óµÄÇø±ð¡£

¼òµ¥µ÷ÓõãÄÚÁª

ÏÖÔÚÎÒÃÇ»¹ÊÇʹÓÃÕâÈý¸öÓÃÀý½øÐвâÊÔ£¬µ«È¥µôÁËÄÚÁªµÄÏÞÖÆ¡£Õâ´ÎfinalºÍÐé·½·¨µ÷ÓõĽá¹ûÈÔÈ»ºÜ½Ó½ü¡£ËüÃDZȷÇÄÚÁª°æ±¾¿ìÁË´ó¸Å4±¶£¬ÎÒÈÏΪÕ⵱ȻÊǽøÐÐÁËÄÚÁªµÄÔ­Òò¡£ÖØÐ´µÄÕâ¸ö·½·¨½éÓÚÁ½ÕßÖ®¼ä¡£ÎÒ»³ÒÉÕâÊÇÓÉÓÚÕâ¸ö·½·¨¿ÉÄÜ´æÔÚ¶à¸ö×ÓÀàµÄʵÏÖ£¬µ¼Ö±àÒëÆ÷²åÈëÁËÒ»¸öÀàÐÍÊØÎÀ£¨type guard)¡£Õâ¸ö»úÖÆÔÚÉÏÃæµÄ¶à̬һ½ÚÖÐÒѾ­ÓкÜÏêϸµÄÃèÊö¡£

Àà²ã¼¶µÄÓ°Ïì

ÍÛ£¬ÕâÀïµÄ·½·¨¿ÉÕæ¶à¡£Ã¿¸ö±àºÅµÄ·½·¨£¨1-4£©¶¼¶ÔÓ¦×Å·½·¨µ÷ÓÃËùÔÚÀàµÄ²ã¼¶µÄÉî¶È¡£Òò´ËparentMethod4·½·¨Òâζ×ÅÎÒÃǵ÷ÓõÄÕâ¸ö·½·¨ÉùÃ÷ÔÚÀàµÄµÚ4¼¶µÄ¸¸ÀàÖС£Èç¹ûÄ㿴һϽá¹ûÊý¾ÝÄã»á·¢ÏÖ1µ½4Ö®¼äÆäʵû̫´óÇø±ð¡£Òò´ËÎÒÃÇ¿ÉÒÔÈÏΪ£¬Àà²ã¼¶µÄÉî¶È²¢Ã»ÓÐʲôӰÏì¡£ÄÚÁªµÄ·½·¨ÐÔÄܺÍÇ°ÃæµÄinlinableAlwaysOverriddenMethod½á¹û²î²»¶à£¬µ«±ÈinlinableVirtualInvokeÒª²îЩ¡£ÎÒÈÏΪÕâÊÇʹÓÃÁËÀàÐÍÊØÎÀµÄÔ­Òò¡£JIT±àÒëÆ÷¿ÉÒÔͳ¼Æ·½·¨ÕÒ³öÐèÒªÄÚÁªµÄÄǸö£¬µ«Ëü²»ÄÜÈ·±£Ò»Ö±¶¼»áÊǵ÷ÓõÄÕâ¸ö·½·¨¡£

Àà²ã¼¶¶Ôfinal·½·¨µÄÓ°Ïì

ÕâºÍÉÏÃæµÄ½á¹û²î²»¶à¡ª¡ªfinal¹Ø¼ü×Ö¿´ÆðÀ´²¢Ã»ÓÐÌ«´óµÄÓ°Ïì¡£ÎÒÔ­±¾ÈÏΪÕâÀï¿ÉÄÜinlinableParentFinalMethod4»á±»ÄÚÁª³É²»Ê¹ÓÃÀàÐÍÊØÎÀµÄ°æ±¾£¬²»¹ý´Ó½á¹ûÀ´¿´²¢²»ÊÇÕâÑù¡£

¶à̬

Monomorphic: 2.816 +- 0.056 ns/op Bimorphic: 3.258 +- 0.195 ns/op Megamorphic: 4.896 +- 0.017 ns/op Inlinable Monomorphic: 1.555 +- 0.007 ns/op Inlinable Bimorphic: 1.555 +- 0.004 ns/op Inlinable Megamorphic: 4.278 +- 0.013 ns/op

×îºóÖÕÓÚµ½Á˶à̬·Ö·¢µÄÁË¡£µ¥Ì¬µ÷ÓõĿªÏúºÍͨ³£µÄÐé·½·¨µ÷ÓÃÊÇÒ»ÑùµÄ¡£Ëæ×ÅÎÒÃÇÐèÒª²éÕÒµÄÐé·½·¨±íÔ½À´Ô½´ó£¬ËüÃÇÒ²±äµÃÔ½À´Ô½ÂýÁË£¬¾ÍÏñ˫̬ºÍÕ×̬ÄÇÁ½¸öÀý×ÓÖÐÄÇÑù¡£Ò»µ©ÎÒÃÇ¿ªÆôÁËÄÚÁª£¬ÀàÐÍ·ÖÎö¿ªÊ¼½éÈëÁË£¬µ¥Ì¬ºÍ˫̬µÄµ÷ÓõãµÄ¿ªÏú½µµÍ³ÉÁË¡±ÄÚÁªÊØÎÀ£¨inlined with guard£©¡°µÄ¿ªÏú¡£¸úÀà²ã¼¶ÓÃÀýÖеĺÜÀàËÆ£¬Ö»ÊÇÉÔ΢ÂýÁËЩ¡£Õ×̬µÄÕâ¸öÈÔȻʮ·Ö»ºÂý¡£¼Çס£¬ÎÒÃDz¢Ã»ÓиæËßhotspot˵²»ÒªÈ¥½øÐÐÄÚÁª£¬Ö»ÊÇËüûÓÐΪ±È˫̬¸ü¸´Ôӵĵ÷ÓõãÀ´ÊµÏÖ¶à̬µÄÄÚÁª»º´æ¶øÒÑ¡£

ÎÒÃÇ´ÓÖÐѧµ½ÁËʲô£¿

ÎÒÏëÖµµÃ×¢ÒâµÄÊÇ£¬ºÜ¶àÈ˶ÔÓÚ²»Í¬ÀàÐ͵ķ½·¨µ÷ÓÃÐèÒª²»Í¬µÄʱ¼ä²¢Ã»ÓÐÒ»¸öÇåÎúµÄÐÔÄÜÄ£ÐÍ£¬Í¬Ê±ËäÈ»ºÜ¶àÈËÒ²ÖªµÀËüÃÇËù»¨·ÑµÄʱ¼ä²»Í¬£¬µ«È´Ã»ÄÜÕýÈ·µØÀí½âËü¡£ÎÒÔø¾­Ò²ÊÇÕâÑù£¬Ò²Ôø×ö¹ý»°¶à´íÎóµÄ¼ÙÉè¡£Òò´ËÎÒÏ£ÍûÕâ´ÎµÄ·ÖÎöÄܶÔÄãÃÇÓÐËù°ïÖú¡£ÏÂÃæÊÇÎÒµÄһЩ×ܽᡣ

·½·¨µ÷ÓõÄ×î¿ìʵÏÖºÍ×îÂýʵÏֵIJî±ð»¹ÊǺܴóµÄ¡£

ÔÚʵ¼ùÖÐÔö¼Ó»òÕß¼õÉÙfinal¹Ø¼ü×ÖÆäʵ¶ÔÐÔÄܵÄÓ°Ïì²¢²»´ó¡£

Àà²ã´Î½á¹¹µÄÉî¶È¶Ô·½·¨µ÷ÓõÄÐÔÄܲ¢Ã»ÓÐʲôʵ¼ÊµÄÓ°Ïì¡£

µ¥Ì¬µ÷ÓñÈ˫̬µ÷ÓÃÒª¿ì¡£

˫̬µ÷ÓñÈÕ×̬µ÷ÓÃÒª¿ì¡£

ÔÚÎÒÃÇÇ°Ãæ¿´µ½µÄ»ùÓÚͳ¼Æ·ÖÎö¿ÉÄÜÊǵ¥Ì¬µ÷Óõ«ÊDz¢²»È·¶¨µÄÓÃÀýÖУ¨×¢£º»á½øÐÐÄÚÁªÓÅ»¯£¬µ«ÊÇÔÚµ÷ÓÃǰ»á²åÈëÒ»¸öÀàÐÍÊØÎÀ£©£¬ÀïÃæËùʹÓõ½µÄÀàÐÍÊØÎÀµÄÈ·ÊÇ»áÓ°Ïìµ½ÐÔÄÜ¡£

ÀàÐÍÊØÎÀµÄ¿ªÏú¶ÔÎÒ¸öÈ˶øÑÔÓкܴóµÄÆô·¢¡£ÎÒºÜÉÙ¿´µ½ÓÐÈËÌá¼°Ëü£¬Í¨³£´ó¼Ò¶¼ÈÏΪËüÎ޹ضøºöÂÔµôÁË¡£

˵Ã÷

µ±È»Õâ²¢²»ÊÇÕâ¸ö»°ÌâµÄÒ»¸ö½áÂÛÐÔµÄÂÛÊö¡£

±¾ÎĹØ×¢µÄÖ»ÊǺͷ½·¨µ÷ÓÃÐÔÄÜÏà¹ØµÄÀàÐÍÏà¹ØµÄÒòËØ¡£ÓÐÒ»¸öÒòËØÎÒûÓÐÌá¼°µ½µÄÊÇ·½·¨ÌåµÄ´óСºÍµ÷ÓÃÕ»µÄÉî¶È¶ÔÄÚÁªµÄÓ°Ïì¡£Èç¹ûÄãµÄ·½·¨Ì«´óµÄ»°£¬ËüÊDz»»á±»ÄÚÁªµÄ£¬ÄãÈÔÈ»»áΪ·½·¨µ÷ÓõĿªÏúÂòµ¥¡£ÕâÒ²ÊÇΪʲô·½·¨ÒªÐ´µÃС¶øÒ׿´¶®µÄÒ»¸öÔ­Òò¡£

ÎÒûÓзÖÎöͨ¹ý½Ó¿Úµ÷Ó÷½·¨¶ÔÕ⼸ÖÖÇé¿öµÄÓ°Ïì¡£Èç¹ûÄã¶ÔÕâ¸ö¸ÐÐËȤµÄ»°£¬ÔÚMechanical SympathyµÄ²©¿ÍÉÏÓйØÓÚ½Ó¿Úµ÷ÓÃÐÔÄܵÄÒ»¸ö·ÖÎö¡£

»¹ÓÐÒ»¸öÍêÈ«ºöÂÔÁ˵ÄÒòËØÊÇ·½·¨ÄÚÁª¶ÔÆäËü±àÒëÆ÷ÓÅ»¯µÄÓ°Ïì¡£µ±±àÒëÖ»¶Ôij¸ö·½·¨½øÐÐÓÅ»¯µÄʱºò£¬Ëüµ±È»Ï£ÍûÄÜÊÕ¼¯¾¡¿ÉÄܶàµÄÐÅÏ¢£¬ÕâÑùËü²ÅÄܸüÓÐЧµØ½øÐÐÓÅ»¯¡£ÄÚÁªÓÅ»¯µÄÏÞÖÆ¿ÉÄÜ»á¶ÔÆäËüÓÅ»¯²úÉúºÜ´óµÄÓ°Ïì¡£

´Ó»ã±àµÄ²ãÃæÀ´½øÐзÖÎö²ÅÄܶÔÕâ¸öÎÊÌâÓиüÉîÈëµÄÁ˽⡣

Ò²ÐíÔÚÒÔºóµÄ²©¿ÍÖлáÌÖÂÛÒ»ÏÂÕâЩ»°Ìâ¡£

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

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö


Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ