¡¡¡¡Ö»ÓаÑÕâЩ¸ÅÄ¸ãÃ÷°×ÁË£¬Äã²Å»áÖªµÀvolatileµÄÕæÕý×÷Óõ½µ×ÊÇʲô¡£²»¹ýÓÐÒ»µãÒªÌáÐÑÄãµÄÊÇ£¬volatile²¢²»±£Ö¤Í¬²½£¬ÕâÒ»µãÒ»¶¨Òª¼Çס¡£²»¹âÊÇÓ¦¸¶ÃæÊÔ¹Ù£¬ÔÚÕæÕýʹÓÃvolatileµÄʱºò£¬Ò²Òª×¢ÒâÕâÒ»µã£¬·ñÔòºÜÈÝÒ׳öÏÖÎÊÌâ¡£
¡¡¡¡ºÃÁË£¬»ù´¡²¿·Ö¾Í˵Õâô¶à°É£¬LZÌôÁËһЩÓдú±íÐÔµÄ˵ÁËÏ£¬¹é¸ù½áµ×£¬ÕâÒ»²¿·Ö¾ÍÊÇÒªÄã·Ç³£ÇåÎúµÄÁ˽âJavaµ±ÖеĹؼü×ÖºÍÓï·¨£¬ÕâÀïËùνµÄÁ˽⣬ÊÇÇåÎúµÄÁ˽âÆäʵÏÖÔÀí£¬¶ø·Ç¼òµ¥µÄ»áÓöøÒÑ¡£
¡¡¡¡
¡¡¡¡2£©JavaÔËÐÐʱ»·¾³
¡¡¡¡JavaÔËÐÐʱ»·¾³¾ÍÊÇJREµÄÖÐÎÄ·Ò룬±¾ÖÊÉÏÆäʵ¾ÍÊÇÖ¸JVM¡£
¡¡¡¡Ê×ÏȶÔÓÚJVM±ØÐëÒªÖªµÀµÄÊÇ£¬JVMÓëHotspotµÄ¹Øϵ¡£JVM¸ü¶àµÄÊÇÖ¸JVM¹æ·¶£¬¶øHotspotÊÇJVMµÄÒ»ÖÖʵÏÖ£¬Ò²ÊÇÎÒÃÇ×î³£ÓõÄJVMʵÏÖ¡£Äã¿ÉÒÔ°ÑJVM¹æ·¶µ±×ö½Ó¿Ú£¬Hotspotµ±×öʵÏÖÀ࣬ÕâÑùÈ¥Àí½â»á±È½Ï¼òµ¥Ò»Ð©¡£
¡¡¡¡´ËÍ⣬JVM×îÖØÒªµÄÈý¸ö²¿·Ö±ØÐëÒª·Ç³£Çå³þ£¬ÄÚ´æ»®·Ö¡¢class¼ÓÔØ»úÖÆÒÔ¼°GC²ßÂÔ¡£¸ãÇå³þÕâÈý²¿·Ö²»½ö½öÊÇΪÁËÃæÊÔ£¬Ò²ÊÇΪÁËÈÃÄã¶ÔÓÚJavaÓиüÉî¿ÌµÄÀí½â£¬Õâ¶ÔÓÚÄãµÄJavaÉúÑķdz£ÓаïÖú¡£
¡¡¡¡¶øÇÒ£¬¹ØÓÚÄÚ´æ»®·Ö£¬»¹ÓÐÒ»µãҪעÒ⣬ÔÛÃdz£ËµµÄ»®·Ö·½Ê½£¬ÆäʵÊÇÖ¸µÄHotspotµÄ»®·Ö·½Ê½£¬¶ø·ÇJVM¹æ·¶Ëù¹æ¶¨µÄ¡£
¡¡¡¡HotspotµÄÄÚ´æ»®·Ö¼òµ¥Ëµ·ÖΪÈý¸ö²¿·Ö£¬Young Generation£¨ÄêÇá´ú£©¡¢Old Generation£¨ÄêÀÏ´ú£©ÒÔ¼°Perm Generation£¨ÓÀ¾Ã´ú£©¡£ÆäÖеÄYoung Generation£¨ÄêÇá´ú£©£¬ÓÖ·ÖΪEden¡¢FromºÍTo£¬ÆäÖÐFromºÍToÓÖͳ³ÆΪSurvivor Spaces£¨ÐÒ´æÇø£©¡£
¡¡¡¡Õý³£Çé¿öÏ£¬Ò»¸ö¶ÔÏó´Ó´´½¨µ½Ïú»Ù£¬Ó¦¸ÃÊÇ´ÓEden£¬È»ºóµ½Survivor Spaces£¨ÐÒ´æÇø£©£¬ÔÙµ½Old Generation£¨ÄêÀÏ´ú£©£¬×îºóÔÚij´ÎGCÏÂÏûʧ¡£
¡¡¡¡µ±È»£¬Ò»¸ö¶ÔÏóÒ²¿ÉÄÜÖ±½ÓÔÚEdenÀïËÀµô£¬Ò²¿ÉÄÜÒ»Ö±ÔÚOld Generation£¨ÄêÀÏ´ú£©´æ»î£¬ÕâЩ¶¼ÊÇÓпÉÄܵġ£
¡¡¡¡¹ØÓÚÄÚ´æ»®·Ö£¬¿ÉÒÔ×Ô¼ºÃ»ÊÂÓÃÄÚ´æ·ÖÎö¹¤¾ß¿´¿´£¬±ÈÈçjmap¡¢jvisualvmµÈµÈ£¬¹Û²ìһϸ÷¸öÇøÓòµÄÄÚ´æ±ä»¯£¬½áºÏʵ¼ÊÈ¥Á˽âһϡ£
¡¡¡¡¹ØÓÚclassloader»úÖƵÄѧϰ£¬¿ÉÒÔ½áºÏtomcatȥѧϰ£¬Á˽âÇå³þtomcatµÄclassloader»úÖÆ£¬¿´tomcatÊÇÈçºÎ±£Ö¤¸÷¸öAPPÖ®¼äµÄÀà¸ôÀëµÄ¡£Èç¹û¿ÉÄܵĻ°£¬¿´Ò»ÏÂtomcatÖÐclassloaderµÄÔ´Â룬»òÕß¿´Ò»ÏÂLZµÄÒ»¸ö¿ªÔ´ÏîÄ¿niubi-job£¬µ±ÖÐÒ²°üº¬ÁËÓëtomcatÀà¼ÓÔØ»úÖÆÏàËƵIJ¿·Ö¡£
¡¡¡¡ÖÁÓÚGC£¬ÐèÒªÇå³þGC Roots¶¼ÓÐÄÄЩ£¬ÒÔ¼°ÈçºÎÅжÏÒ»¸ö¶ÔÏó¿ÉÒÔ±»»ØÊÕ¡£´ËÍ⣬GCµÄËã·¨ºÍ²ßÂÔÒ²ÒªÓдó¸ÅµÄÁ˽⣬¾ßÌåµÄ¿ÉÒԲμûLZ¹ØÓÚÕâһϵÁеÄÎÄÕ£¬µØַΪ¡£
¡¡¡¡
¡¡¡¡3£©²¢·¢ÖªÊ¶Óëconcurrent°ü
¡¡¡¡ÒªÏë½øÈëÒ»Ïß»¥ÁªÍø¹«Ë¾£¬Õⲿ·ÖÄÚÈݱØÐëÒª»á£¬·ñÔòµÄ»°£¬ÄãʼÖÕ¶¼Ö»ÄÜÍ£ÁôÔڱȽÏlowµÄ¶Îλ¡£
¡¡¡¡¹ØÓÚ²¢·¢ÖªÊ¶£¬×îÖØÒªµÄÁ½¸ö¸ÅÄîÒ»¶¨Òª¸ãÇå³þ£¬ÄǾÍÊǿɼûÐÔºÍÔ×ÓÐÔ¡£ÆäÖпɼûÐÔÓëÇ°ÃæÌáµ½µÄvolatile¹Ø¼ü×ÖÊÇϢϢÏà¹ØµÄ£¬¿É¼ûÐÔÖ»ÊDz¢·¢ÁìÓòÀïµÄÒ»¸ö¸ÅÄ¶øvolatileÔòÊÇJavaÓïÑÔÖУ¬ÊµÊµÔÚÔÚ±£Ö¤±äÁ¿¿É¼ûÐԵĹؼü×Ö¡£
¡¡¡¡Ç°Ãæ˵ÁË£¬ÒªÅªÇå³þ¿É¼ûÐÔ£¬¾ÍÐèÒª¸ãÇå³þÖ÷´æºÍ¹¤×÷ÄÚ´æ¡£¹ØÓÚÖ÷´æºÍ¹¤×÷Äڴ棬ÆäʵÓÖÊôÓÚJVMµÄ֪ʶ·¶³ë¡£ËùÒÔ´ÓÕâÀï¾Í¿ÉÒÔ¿´³öÀ´£¬ÖªÊ¶¶¼ÊÇÓйØÁªÐԵġ£
¡¡¡¡Ô×ÓÐÔÆäʵÏà¶ÔÓڿɼûÐÔÀ´Ëµ£¬·´µ¹¸üºÃÀí½âһЩ£¬ÏàÐÅÄǸöÍòÄê²»±äµÄÒøÐлã¿îµÄ¹ØÓÚÊÂÎñµÄÀý×Ó£¬¾Í×ãÒԴ󲿷ÖÈËÀí½âÔ×ÓÐÔÕâ¸ö¸ÅÄîÁË£¬ËüÆäʵ¾ÍÊÇÒ»¸ö»ò¶à¸ö²Ù×÷£¬±»ÊÓ×÷Ò»¸öÕûÌåµÄÒâ˼¡£
¡¡¡¡ÓÐÁ˲¢·¢µÄ»ù´¡ÖªÊ¶ÒÔºó£¬Äã¾ÍÐèÒªÑо¿Ò»ÏÂconcurrent°üÁË¡£ÕâÀïÃæµÄ¶«Î÷ÆäʵÊÇÒ»¸ö±¦²Ø£¬Ò»µ©ÄãÐèҪд²¢·¢Ïà¹ØµÄ¹¦ÄÜ£¬Äã»á·¢ÏÖÕâÀïÃæµÄ¶«Î÷·Ç³£ÊµÓá£
¡¡¡¡ÆäÖÐConcurrentHashMapÊÇÃæÊÔ×îÈÝÒ×±»Îʵ½µÄÒ»¸öÀ࣬¼¸ºõËùÓеÄÃæÊÔ¶¼»áÎÊÄ㣬ConcurrentHashMapºÍÆÕͨµÄͬ²½HashMapÓÐʲôÇø±ð¡£
¡¡¡¡Õâ¸öÎÊÌâÆäʵÐèÒªÄãÖªµÀÁ½¸ö֪ʶ¾Í¿ÉÒÔÁË£¬Ò»¸öÊÇHashMapµÄÊý¾Ý½á¹¹£¬Ò»¸öÊÇËø·Ö¶ÎµÄ¼¼Êõ£¬¾ßÌåµÄLZÕâÀï¾Í²»½âÊÍÁË£¬´ó¼Ò×Ô¼ºÏÂÈ¥ÕÒÏà¹Ø×ÊÁÏ¿´°É¡£
¡¡¡¡´ËÍ⣬concurrent°üÀïÓÐÒ»¸ö·Ç³£ÖØÒªµÄÀ࣬½Ð×öAbstractQueuedSynchronizer£¬¼¸ºõËùÓеÄconcurrent°üÄڵIJ¢·¢¹¤¾ßÀ࣬¶¼ÊÇ»ùÓÚÕâ¸ö³éÏóÀàÀ©Õ¹³öÀ´µÄ¡£Òò´Ë£¬°ÑAbstractQueuedSynchronizerÕâ¸öÀàÑо¿Í¸³¹£¬·Ç³£ÓÐÖúÓÚÄãÀí½âconcurrent°ü¡£
¡¡¡¡×îºóÒ»µã£¬ÃæÊÔµÄʱºò»¹¾³£»á±»Îʵ½µÄÒ»¸öÎÊÌ⣬¾ÍÊÇReentrantLockºÍsynchronized¹Ø¼ü×ÖÓÐʲôÇø±ð¡£
¡¡¡¡¼ÇµÃLZ֮ǰ×éÖ¯¹ýµÄYYÃæÊԻÀLZÎʹýºÜ¶à´ÎÕâ¸öÎÊÌ⣬µ«¼¸ºõËùÓÐÈ˶¼´ð²»³öÀ´¡£ÕâÖ»ÄÜ˵Ã÷Ò»¸öÎÊÌ⣬ÄǾÍÊǴ󲿷ÖÈËÔÚÓÃsynchronizedºÍReentrantLockµÄʱºò£¬²¢²»»á¿¼ÂÇÕâÁ½Õßµ½µ×ÓÃÄĸöºÃһЩ¡£
¡¡¡¡ÆäʵËüÃǵÄÇø±ðºÜ¼òµ¥£¬¼òµ¥µÄ˵£¬¾ÍÊÇsynchronizedÓÉÓÚÊǵײãJVMʵÏֵĻ¥³â£¬Òò´ËЧÂÊ»á¸ßһЩ¡£¶øReentrantLockµÄ¹¦ÄÜÔò±Èsynchronized¸ü¶à£¬±ÈÈ綨ʱ»ñȡij¸öËø£¬¶à¸öµÈ´ýÌõ¼þµÈ¡£
¡¡¡¡²¢·¢ÕâÒ»²¿·ÖÊÇÒ»¸ö³ÌÐòÔ±½ø½×µÄÖØÒª²¿·Ö£¬Ï£ÍûËùÓÐJava³ÌÐòÔ±¶¼¿ÉÒÔÖØÊÓÕâÒ»²¿·Ö¡£
¡¡¡¡
¡¡¡¡4£©Éè¼ÆģʽºÍ·´Éä
¡¡¡¡Éè¼ÆģʽºÍ·´ÉäÕⲿ·ÖÄÚÈÝ£¬LZ¸öÈ˾õµÃÊÇÒ»¸ö¸ß½×³ÌÐòÔ±±ØÐ뾫ͨµÄ²¿·Ö¡£
¡¡¡¡ÓúÃÁËÕⲿ·Ö֪ʶ£¬¿ÉÒÔÈÃÄãÔÚʵ¼Ê¿ª·¢ÖÐÉÙдN¶à´úÂ룬¶øÇÒ»¹¿ÉÒÔʹµÃ³ÌÐòµÄ½á¹¹¸ü¼ÓÁ¼ºÃ¡£
¡¡¡¡¹ØÓÚÉè¼ÆģʽLZÕâÀï¾Í²»¶à×ö½éÉÜÁË£¬¾ßÌåµÄ¿ÉÒÔ¿´LZµÄÉè¼ÆģʽϵÁÐÎÄÕ£¬µØÖ·ÊÇ¡£
¡¡¡¡¹ØÓÚ·´É䣬Æäʵ¾ÍÊÇreflect°üÀïµÄÄÚÈÝ£¬Õâ¸ö°üÀïµÄÀàÆäʵ²¢²»ÄÑ£¬Ö÷ÒªÊǵöàÓ㬶࿴¡£±ÈÈçJavaÁìÓòÀï×î³£ÓõÄspring¿ò¼Ü£¬ÀïÃæÆäʵ´óÁ¿³ä³â×ÅÉè¼ÆģʽºÍ·´ÉäµÄÕæʵʹÓó¡¾°£¬Ã»Ê¶àÑо¿Ò»Ï£¬¾ø¶ÔÈÃÄãÊÜÒæ·Ëdz¡£
¡¡¡¡
¡¡¡¡5£©ÎļþIO¡¢NIO¡¢ÍøÂçIOÒÔ¼°ÍøÂçÐÒé
¡¡¡¡ÎļþIO¡¢NIOÒÔ¼°ÍøÂçIOÕâÒ»²¿·ÖÒ²Êǹ¤×÷µ±ÖÐÒª¾³£Óõ½µÄ²¿·Ö£¬Òò´ËÒ²±ØÐëÒªÕÆÎÕ¡£
¡¡¡¡ÆäÖÐNIO¸ü¶àµÄÊÇÁ˽âÆäÔÀí£¬´ËÍ⣬tomcatÖÐÓжàÖÖÐÒéµÄʵÏÖ£¬ÆäÖаüÀ¨ÁËBIO¡¢NIOºÍAPR£¬ÕâÈýÕßÒ»¶¨·Ç³£Çå³þËüÃǵÄÇø±ð£¬Õâ¸ö¿ÉÒÔÔÚconnectorµÄprotocolÊôÐÔÅäÖá£
¡¡¡¡ÖÁÓÚÍøÂçIO²¿·Ö£¬Æäʵ¾ÍÊÇnet°üÀïµÄÄÚÈÝ¡£ÕâÀïÃæµÄÄÚÈÝÊǷdz£³£ÓõĶ«Î÷£¬±ÈÈçÄãµ÷ÓÃHTTP-API£¬ÄÇô¾ÍÐèҪʹÓÃÕâÀïÃæµÄÀà¡£ÔÚÕâ¸örestful-API·ºÀĵÄʱ´ú£¬ÄãÉÙ²»ÁËҪʹÓÃHTTPÐÒéµ÷ÓÃAPI¡£
¡¡¡¡´ËÍ⣬ÔÚÁ˽âÕⲿ·ÖµÄʱºò£¬ÍøÂçÐÒéÒ²ÒªÊʵ±µÄÁ˽âһϣ¬×îµäÐ͵ÄTCPºÍHTTPÐÒéÊÇÒ»¶¨ÒªÁ˽âµÄ¡£
¡¡¡¡ÔÚLZ²Î¼ÓµÄÃæÊÔÖУ¬»ù±¾ÉÏTCPÐÒéÊÇÒ»¶¨»áÎʵģ¬ËäÈ»Õâ¿ÉÄܺÍLZµÄ¼òÀúдÁËTCPÐÒéÓйأ¬µ«±ÈÈçTCPÐÒéµÄÖØÊÔ»úÖÆ£¬Èý´ÎÎÕÊֵĹý³Ì£¬TCPÓëUDPµÄÇø±ðÕâÒ»ÀàµÄ֪ʶ£¬»¹ÊÇÒªÁ˽âһϵġ£
¡¡¡¡ÖÁÓÚHTTPÐÒ飬Ïà¶ÔÀ´Ëµ¾Í¼òµ¥ºÜ¶àÁË£¬Ó¦ÓòãµÄÐÒéÖ÷ÒªÊÇÖªµÀÆäÐÒé¸ñʽ¼´¿É£¬±ÈÈ綼֧³ÖÄÄЩheader¡¢Ã¿¸öheader¶¼ÊÇʲôº¬ÒåµÈµÈ¡£
¡¡¡¡
¡¡¡¡6£©Ð¡½á
¡¡¡¡ºÃÁË£¬µ½´ËΪֹ£¬»ù±¾ÒªÇó¾Í²î²»¶à½éÉÜÍêÁË¡£Ï¸ÐĵÄÔ³ÓÑ¿ÉÄÜ»á×¢Òâµ½£¬ÕâЩÄÚÈÝÆäʵºÍLZÉÏһƪÎÄÕ¡¶ÍòÄܵÄÁÖÏô˵£ºÒ»ÆªÎÄÕ½̻áÄ㣬ÈçºÎ×öµ½ÕÐƸҪÇóÖеġ°ÒªÓÐÔúʵµÄJava»ù´¡¡±¡£¡·£¬Óв»ÉÙµÄÏà֮ͨ´¦¡£
¡¡¡¡Ã»´í£¬Æäʵ»ù±¾ÒªÇóÕⲿ·Ö£¬²î²»¶à¾ÍÊÇÒªÇóÄãÓÐÔúʵµÄJava»ù´¡¡£ÕâÒ²ÊÇËùÓÐÒ»Ïß»¥ÁªÍø¹«Ë¾£¬»ù±¾¶¼»áдÔÚÕÐƸҪÇóµØÇ°¼¸ÌõµÄÒªÇó¡£
¡¡¡¡Òò´Ë£¬ÒªÏë½øÈëBAT£¬ÄÇôÕâÒ»²¿·ÖµÄÄÚÈÝÒ»¶¨ÒªÁ˽⣬¶øÇÒÕⲿ·ÖµÄÄÚÈݶÔÄãʵ¼Ê¿ª·¢Ò²ÊǷdz£ÓаïÖúµÄ£¬²¢²»½ö½öÊÇΪÁËÓ¦¸¶ÃæÊÔ¡£
¡¡¡¡
¶þ¡¢¿ÉÑ¡ÒªÇó¡¡¡¡
¡¡¡¡¿´µ½¿ÉÑ¡ÒªÇóËĸö×Ö£¬»òÐí²»ÉÙÈË»áÈÏΪÕⲿ·Ö²»Ì«ÖØÒª¡£µ«ÊÇLZ¿ÉÒԺܸºÔðµÄ¸æËßÄ㣬Õⲿ·ÖÍùÍù²ÅÊǾö¶¨¹«Ë¾Òª²»ÒªÄãµÄÖØÒªÖ¸±ê¡£
¡¡