ÀÖÓãµç¾º





½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

JVMÄÚ´æÄ£ÐÍÏêϸ½éÉÜ[javaÅàѵ]

¸üÐÂʱ¼ä:2020Äê03ÔÂ15ÈÕ10ʱ30·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:

Web·þÎñ¶ËÊÇJavaÓïÑÔ×îÉó¤µÄÁìÓòÖ®Ò»£¬Ò²»áJava×î¹ã·ºÓ¦Óõĵط½¡£¶ø¸ß²¢·¢¸ßÍÌÍÂÁ¿Ò²Ô½À´Ô½³ÉΪ·þÎñ¶ËÆÕ±éÐèÇó£¬ËùÓÐÄܹ»¿ª·¢³ö¸ßЧ²¢·¢µÄÓ¦ÓóÌÐò£¬Ò²ÊdzÉΪһ¸ö¸ß¼¶³ÌÐòÔ±µÄ±Ø±¸¼¼ÄÜ¡£ÏÂÃæÎÒÃǽ«´ÓJVMÄÚ´æÄ£Ð͵ĽǶÈÀ´·ÖÎöÐéÄâ»úÈçºÎʵÏÖ¶àÏ̡߳¢¶àÏß³ÌÖ®¼äÓÉÓÚ¹²ÏíºÍ¾ºÕùÊý¾Ý¶øµ¼ÖµIJ¢·¢ÎÊÌâ¼°½â¾ö˼·¡£

¼ÆËã»úÓ²¼þÄÚ´æ¼Ü¹¹

ÏëÒªÁ˽âJVMÄÚ´æÄ£ÐÍ£¬ÎÒÃÇÐèÒªÏÈÁ˽âϼÆËã»úµÄÓ²¼þÄÚ´æ¼Ü¹¹

jvmÄÚ´æ¼Ü¹¹Ä£ÐÍ01

ÕýÈçÉÏͼËùʾ£¬¾­¹ý¼ò»¯CPUÓëÄÚ´æ²Ù×÷µÄ¼òÒ×ͼ£¬Êµ¼ÊÉÏûÓÐÕâô¼òµ¥£¬ÕâÀïΪÁËÀí½â·½±ã£¬ÎÒÃÇʡȥÁËÄϱ±ÇŲ¢½«Èý¼¶»º´æÍ³Ò»ÎªCPU»º´æ(ÓÐЩCPUÖ»Óжþ¼¶»º´æ£¬ÓÐЩCPUÓÐÈý¼¶»º´æ)¡£¾ÍĿǰ¼ÆËã»ú¶øÑÔ£¬Ò»°ãÓµÓжà¸öCPU²¢ÇÒÿ¸öCPU¿ÉÄÜ´æÔÚ¶à¸öºËÐÄ£¬¶àºËÊÇÖ¸ÔÚһö´¦ÀíÆ÷(CPU)Öм¯³ÉÁ½¸ö»ò¶à¸öÍêÕûµÄ¼ÆËãÒýÇæ(ÄÚºË),ÕâÑù¾Í¿ÉÒÔÖ§³Ö¶àÈÎÎñ²¢ÐÐÖ´ÐУ¬´Ó¶àÏ̵߳ĵ÷¶ÈÀ´Ëµ£¬Ã¿¸öÏ̶߳¼»áÓ³Éäµ½¸÷¸öCPUºËÐÄÖв¢ÐÐÔËÐС£ÔÚCPUÄÚ²¿ÓÐÒ»×éCPU¼Ä´æÆ÷£¬¼Ä´æÆ÷ÊÇCPUÖ±½Ó·ÃÎʺʹ¦ÀíµÄÊý¾Ý£¬ÊÇÒ»¸öÁÙʱ·ÅÊý¾ÝµÄ¿Õ¼ä¡£Ò»°ãCPU¶¼»á´ÓÄÚ´æÈ¡Êý¾Ýµ½¼Ä´æÆ÷£¬È»ºó½øÐд¦Àí£¬µ«ÓÉÓÚÄÚ´æµÄ´¦ÀíËÙ¶ÈÔ¶Ô¶µÍÓÚCPU£¬µ¼ÖÂCPUÔÚ´¦ÀíÖ¸ÁîʱÍùÍù»¨·ÑºÜ¶àʱ¼äÔڵȴýÄÚ´æ×ö×¼±¸¹¤×÷£¬ÓÚÊÇÔڼĴæÆ÷ºÍÖ÷ÄÚ´æ¼äÌí¼ÓÁËCPU»º´æ£¬CPU»º´æ±È½ÏС£¬µ«·ÃÎÊËٶȱÈÖ÷ÄÚ´æ¿ìµÃ¶à£¬ÓÃËüÀ´×÷ΪÄÚ´æÓë´¦ÀíÆ÷Ö®¼äµÄ»º³å£º½«ÔËËãÐèҪʹÓõ½µÄÊý¾Ý¸´ÖƵ½»º´æÖУ¬ÈÃÔËËãÄÜ¿ìËÙ½øÐУ¬µ±ÔËËã½áÊøºóÔÙ´Ó»º´æÍ¬²½µ½ÄÚ´æÖ®ÖУ¬ÕâÑù´¦ÀíÆ÷¾Í²»Óõȴý»ºÂýµÄÄÚ´æ¶ÁдÁË¡£

»ùÓÚ¸ßËÙ»º´æµÄ´æ´¢½»»¥ºÜºÃµÄ½â¾öÁË´¦ÀíÆ÷ÓëÄÚ´æµÄËÙ¶Èì¶Ü£¬µ«Ò²Îª¼ÆËã»úϵͳ ´øÀ´Á˸ü¸ßµÄ¸´ÔÓ¶È£¬ÒòΪËüÒýÈëÁËÒ»¸öеÄÎÊÌ⣺»º´æÒ»ÖÂÐÔ¡£ÔÚ¶à´¦ÀíÆ÷ϵͳÖУ¬Ã¿¸ö´¦ÀíÆ÷¶¼ÓÐ×Ô¼ºµÄ¸ßËÙ»º´æ£¬¶øËüÃÇÓÖ¹²ÏíͬһÖ÷ÄÚ´æ(RAM)¡£µ±¶à¸ö´¦ÀíÆ÷µÄÔËËãÈÎÎñ¶¼É漰ͬһ¿éÖ÷ÄÚ´æÇøÓòʱ£¬½«¿ÉÄܵ¼Ö¸÷×ԵĻº´æÊý¾Ý²»Ò»Ö£¬ÎªÁ˽â¾öÒ»ÖÂÐÔÎÊÌ⣬ÐèÒª¸÷¸ö´¦ÀíÆ÷·ÃÎÊ»º´æÊ±¶¼×ñѭһЩЭÒ飬ÔÚ¶Áдʱ¸ù¾ÝЭÒéÀ´½øÐвÙ×÷£¬ÕâЩЭÒéÓÐMSI¡¢MESI¡¢MOSIµÈ¡£±»³ÆÎªÓ²¼þµÄ“ÄÚ´æÄ£ÐÍ”£¬¿ÉÒÔÀí½âΪÔÚÌØ¶¨µÄ²Ù×÷ЭÒéÏ£¬¶ÔÌØ¶¨µÄÄÚ´æ»ò¸ßËÙ»º´æ½øÐжÁд·ÃÎʵĹý³Ì³éÏó¡£²»Í¬¼Ü¹¹µÄÎïÀí»úÆ÷¿ÉÒÔÓµÓв»Ò»ÑùµÄÄÚ´æÄ£ÐÍ£¬¶øÎÒÃǵÄJAVAÐéÄâ»úÒ²ÓÐ×Ô¼ºµÄÄÚ´æÄ£ÐÍ¡£

JavaÏß³ÌÓëÓ²¼þ´¦ÀíÆ÷

Á˽âÍêÓ²¼þµÄÄÚ´æ¼Ü¹¹ºó£¬½Ó×ÅÁ˽âJVMÖÐÏ̵߳ÄʵÏÖÔ­Àí£¬Àí½âÏ̵߳ÄʵÏÖÔ­Àí£¬ÓÐÖúÓÚÎÒÃÇÁ˽âJavaÄÚ´æÄ£ÐÍÓëÓ²¼þÄÚ´æ¼Ü¹¹µÄ¹ØÏµ£¬ÔÚWindowϵͳºÍLinuxϵͳÉÏ£¬JavaÏ̵߳ÄʵÏÖÊÇ»ùÓÚÒ»¶ÔÒ»µÄÏß³ÌÄ£ÐÍ£¬ËùνµÄÒ»¶ÔһģÐÍ£¬Êµ¼ÊÉϾÍÊÇͨ¹ýÓïÑÔ¼¶±ð²ãÃæ³ÌÐòÈ¥¼ä½Óµ÷ÓÃϵͳÄں˵ÄÏß³ÌÄ£ÐÍ£¬¼´ÎÒÃÇÔÚʹÓÃJavaÏß³Ìʱ£¬JavaÐéÄâ»úÄÚ²¿ÊÇת¶øµ÷Óõ±Ç°²Ù×÷ϵͳµÄÄÚºËÏß³ÌÀ´Íê³Éµ±Ç°ÈÎÎñ¡£ÕâÀïÐèÒªÁ˽âÒ»¸öÊõÓÄÚºËÏß³Ì(Kernel-Level Thread£¬KLT)£¬ËüÊÇÓɲÙ×÷ϵͳÄÚºË(Kernel)Ö§³ÖµÄỊ̈߳¬ÕâÖÖÏß³ÌÊÇÓɲÙ×÷ϵͳÄÚºËÀ´Íê³ÉÏß³ÌÇл»£¬ÄÚºËͨ¹ý²Ù×÷µ÷¶ÈÆ÷½ø¶ø¶ÔÏß³ÌÖ´Ðе÷¶È£¬²¢½«Ï̵߳ÄÈÎÎñÓ³Éäµ½¸÷¸ö´¦ÀíÆ÷ÉÏ¡£Ã¿¸öÄÚºËÏ߳̿ÉÒÔÊÓΪÄں˵ÄÒ»¸ö·ÖÉí,ÕâÒ²¾ÍÊDzÙ×÷ϵͳ¿ÉÒÔͬʱ´¦Àí¶àÈÎÎñµÄÔ­Òò¡£ÓÉÓÚÎÒÃDZàдµÄ¶àÏ̳߳ÌÐòÊôÓÚÓïÑÔ²ãÃæµÄ£¬³ÌÐòÒ»°ã²»»áÖ±½ÓÈ¥µ÷ÓÃÄÚºËỊ̈߳¬È¡¶ø´úÖ®µÄÊÇÒ»ÖÖÇáÁ¿¼¶µÄ½ø³Ì(Light Weight Process)£¬Ò²ÊÇͨ³£ÒâÒåÉϵÄỊ̈߳¬ÓÉÓÚÿ¸öÇáÁ¿¼¶½ø³Ì¶¼»áÓ³Éäµ½Ò»¸öÄÚºËỊ̈߳¬Òò´ËÎÒÃÇ¿ÉÒÔͨ¹ýÇáÁ¿¼¶½ø³Ìµ÷ÓÃÄÚºËỊ̈߳¬½ø¶øÓɲÙ×÷ϵͳÄں˽«ÈÎÎñÓ³Éäµ½¸÷¸ö´¦ÀíÆ÷£¬ÕâÖÖÇáÁ¿¼¶½ø³ÌÓëÄÚºËÏ̼߳ä1¶Ô1µÄ¹ØÏµ¾Í³ÆÎªÒ»¶ÔÒ»µÄÏß³ÌÄ£ÐÍ¡£

JvmÄÚ´æÄ£ÐÍ03

JavaÄÚ´æÄ£ÐÍ

ÄÚ´æÄ£Ð͸ÅÊö

JavaÄÚ´æÄ£ÐÍ(¼´Java Memory Model£¬¼ò³ÆJMM)±¾ÉíÊÇÒ»ÖÖ³éÏóµÄ¸ÅÄ²¢²»ÕæÊµ´æÔÚ£¬ËüÃèÊöµÄÊÇÒ»×鹿Ôò»ò¹æ·¶£¬Í¨¹ýÕâ×鹿·¶¶¨ÒåÁ˳ÌÐòÖи÷¸ö±äÁ¿(°üÀ¨ÊµÀý×ֶΣ¬¾²Ì¬×ֶκ͹¹³ÉÊý×é¶ÔÏóµÄÔªËØ)µÄ·ÃÎÊ·½Ê½¡£

JavaÄÚ´æÄ£Ð͵ÄÖ÷ҪĿ±êÊǶ¨Òå³ÌÐòÖеĸ÷¸ö±äÁ¿µÄ·ÃÎʹæÔò£¬¼´ÈçºÎÔÚÐéÄâ»úÖн«±äÁ¿´æ´¢µ½ÄÚ´æºÍ´ÓÄÚ´æÖÐÈ¡³ö¡£´Ë´¦µÄ±äÁ¿²»°üÀ¨¾Ö²¿±äÁ¿ºÍ·½·¨²ÎÊý£¬ÒòΪËüÃÇÊÇÏß³Ì˽ÓеÄ£¬²»»á±»¹²Ïí£¬×ÔÈ»²»´æÔÚ¾ºÕùÎÊÌâ¡£ÓÉÓÚJVMÔËÐгÌÐòµÄʵÌåÊÇỊ̈߳¬¶øÃ¿¸öÏ̴߳´½¨Ê±JVM¶¼»áΪÆä´´½¨Ò»¸ö¹¤×÷ÄÚ´æ(ÓÐЩµØ·½³ÆÎªÕ»¿Õ¼ä)£¬ÓÃÓÚ´æ´¢Ïß³Ì˽ÓеÄÊý¾Ý£¬¶øJavaÄÚ´æÄ£ÐÍÖй涨ËùÓбäÁ¿¶¼´æ´¢ÔÚÖ÷Äڴ棬Ö÷ÄÚ´æÊǹ²ÏíÄÚ´æÇøÓò£¬ËùÓÐÏ̶߳¼¿ÉÒÔ·ÃÎÊ£¬µ«Ï̶߳ԱäÁ¿µÄ²Ù×÷(¶ÁÈ¡¸³ÖµµÈ)±ØÐëÔÚ¹¤×÷ÄÚ´æÖнøÐУ¬Ê×ÏÈÒª½«±äÁ¿´ÓÖ÷Äڴ濽±´µÄ×Ô¼ºµÄ¹¤×÷ÄÚ´æ¿Õ¼ä£¬È»ºó¶Ô±äÁ¿½øÐвÙ×÷£¬²Ù×÷Íê³ÉºóÔÙ½«±äÁ¿Ð´»ØÖ÷Äڴ棬²»ÄÜÖ±½Ó²Ù×÷Ö÷ÄÚ´æÖеıäÁ¿£¬¹¤×÷ÄÚ´æÖд洢×ÅÖ÷ÄÚ´æÖеıäÁ¿¸±±¾¿½±´£¬Ç°ÃæËµ¹ý£¬¹¤×÷ÄÚ´æÊÇÿ¸öÏ̵߳Ä˽ÓÐÊý¾ÝÇøÓò£¬Òò´Ë²»Í¬µÄÏ̼߳äÎÞ·¨·ÃÎʶԷ½µÄ¹¤×÷Äڴ棬Ï̼߳äµÄͨÐÅ(´«Öµ)±ØÐëͨ¹ýÖ÷ÄÚ´æÀ´Íê³É£¬Ï̡߳¢Ö÷ÄÚ´æ¡¢¹¤×÷ÄÚ´æÈýÕߵĹØÏµÈçÏÂͼ

jvmÄÚ´æÄ£ÐÍ04

ŪÇå³þÖ÷ÄÚ´æºÍ¹¤×÷ÄÚ´æºó£¬½ÓÁ˽âÒ»ÏÂÖ÷ÄÚ´æÓ빤×÷ÄÚ´æµÄÊý¾Ý´æ´¢ÀàÐÍÒÔ¼°²Ù×÷·½Ê½£¬¸ù¾ÝÐéÄâ»ú¹æ·¶£¬¶ÔÓÚÒ»¸öʵÀý¶ÔÏóÖеijÉÔ±·½·¨¶øÑÔ£¬Èç¹û·½·¨Öаüº¬±¾µØ±äÁ¿ÊÇ»ù±¾Êý¾ÝÀàÐÍ(boolean,byte,short,char,int,long,float,double)£¬½«Ö±½Ó´æ´¢ÔÚ¹¤×÷ÄÚ´æµÄÖ¡Õ»½á¹¹ÖУ¬µ«ÌÈÈô±¾µØ±äÁ¿ÊÇÒýÓÃÀàÐÍ£¬ÄÇô¸Ã±äÁ¿µÄÒýÓÃ»á´æ´¢ÔÚ¹¦ÄÜÄÚ´æµÄÖ¡Õ»ÖУ¬¶ø¶ÔÏóʵÀý½«´æ´¢ÔÚÖ÷ÄÚ´æ(¹²ÏíÊý¾ÝÇøÓò£¬¶Ñ)ÖС£µ«¶ÔÓÚʵÀý¶ÔÏóµÄ³ÉÔ±±äÁ¿£¬²»¹ÜËüÊÇ»ù±¾Êý¾ÝÀàÐÍ»òÕß°ü×°ÀàÐÍ(Integer¡¢DoubleµÈ)»¹ÊÇÒýÓÃÀàÐÍ£¬¶¼»á±»´æ´¢µ½¶ÑÇø¡£ÖÁÓÚstatic±äÁ¿ÒÔ¼°Àà±¾ÉíÏà¹ØÐÅÏ¢½«»á´æ´¢ÔÚÖ÷ÄÚ´æÖС£ÐèҪעÒâµÄÊÇ£¬ÔÚÖ÷ÄÚ´æÖеÄʵÀý¶ÔÏó¿ÉÒÔ±»¶àÏ̹߳²Ïí£¬ÌÈÈôÁ½¸öÏß³Ìͬʱµ÷ÓÃÁËͬһ¸ö¶ÔÏóµÄͬһ¸ö·½·¨£¬ÄÇôÁ½ÌõÏ̻߳ὫҪ²Ù×÷µÄÊý¾Ý¿½±´Ò»·Ýµ½×Ô¼ºµÄ¹¤×÷ÄÚ´æÖУ¬Ö´ÐÐÍê³É²Ù×÷ºó²Åˢе½Ö÷ÄÚ´æ¡£

JAVAÄÚ´æÄ£ÐÍÓëJAVAÄÚ´æÇøÓò¹ØÏµ

ÕâÀïÐèҪעÒâÏÂJAVAÄÚ´æÄ£ÐÍÖеÄÖ÷ÄÚ´æ¡¢¹¤×÷ÄÚ´æÓëJAVAÄÚ´æÇøÓòÖеÄJAVA¶Ñ¡¢Õ»¡¢·½·¨Çø²»ÊÇͬһ²ã´ÎµÄÄÚ´æ»®·Ö£¬²»Òª»ìÏý¡£

JAVAÄÚ´æÄ£ÐÍ

·Ö÷ÄÚ´æ

Ö÷Òª´æ´¢µÄÊÇJavaʵÀý¶ÔÏó£¬ËùÓÐÏ̴߳´½¨µÄʵÀý¶ÔÏó¶¼´æ·ÅÔÚÖ÷ÄÚ´æÖУ¬²»¹Ü¸ÃʵÀý¶ÔÏóÊdzÉÔ±±äÁ¿»¹ÊÇ·½·¨Öеı¾µØ±äÁ¿(Ò²³Æ¾Ö²¿±äÁ¿)£¬µ±È»Ò²°üÀ¨Á˹²ÏíµÄÀàÐÅÏ¢¡¢³£Á¿¡¢¾²Ì¬±äÁ¿¡£ÓÉÓÚÊǹ²ÏíÊý¾ÝÇøÓò£¬¶àÌõÏ̶߳Ôͬһ¸ö±äÁ¿½øÐзÃÎÊ¿ÉÄܻᷢÏÖḬ̈߳²È«ÎÊÌâ¡£

·¹¤×÷ÄÚ´æ

Ö÷Òª´æ´¢µ±Ç°·½·¨µÄËùÓб¾µØ±äÁ¿ÐÅÏ¢(¹¤×÷ÄÚ´æÖд洢×ÅÖ÷ÄÚ´æÖеıäÁ¿¸±±¾¿½±´)£¬Ã¿¸öÏß³ÌÖ»ÄÜ·ÃÎÊ×Ô¼ºµÄ¹¤×÷Äڴ棬¼´Ïß³ÌÖеı¾µØ±äÁ¿¶ÔÆäËüÏß³ÌÊDz»¿É¼ûµÄ£¬¾ÍËãÊÇÁ½¸öÏß³ÌÖ´ÐеÄÊÇͬһ¶Î´úÂ룬ËüÃÇÒ²»á¸÷×ÔÔÚ×Ô¼ºµÄ¹¤×÷ÄÚ´æÖд´½¨ÊôÓÚµ±Ç°Ï̵߳ı¾µØ±äÁ¿£¬µ±È»Ò²°üÀ¨ÁË×Ö½ÚÂëÐкÅָʾÆ÷¡¢Ïà¹ØNative·½·¨µÄÐÅÏ¢¡£×¢ÒâÓÉÓÚ

¹¤×÷ÄÚ´æÊÇÿ¸öÏ̵߳Ä˽ÓÐÊý¾Ý£¬Ï̼߳äÎÞ·¨Ï໥·ÃÎʹ¤×÷Äڴ棬Òò´Ë´æ´¢ÔÚ¹¤×÷ÄÚ´æµÄÊý¾Ý²»´æÔÚḬ̈߳²È«ÎÊÌâ¡£

JavaÄÚ´æÇøÓò

jvmÄÚ´æÄ£ÐÍ06

··½·¨Çø(Method Area)

·½·¨ÇøÊôÓÚÏ̹߳²ÏíµÄÄÚ´æÇøÓò£¬ÓÖ³ÆNon-Heap(·Ç¶Ñ)£¬Ö÷ÒªÓÃÓÚ´æ´¢Òѱ»ÐéÄâ»ú¼ÓÔØµÄÀàÐÅÏ¢¡¢³£Á¿¡¢¾²Ì¬±äÁ¿¡¢¼´Ê±±àÒëÆ÷±àÒëºóµÄ´úÂëµÈÊý¾Ý£¬¸ù¾ÝJava ÐéÄâ»ú¹æ·¶µÄ¹æ¶¨£¬µ±·½·¨ÇøÎÞ·¨Âú×ãÄÚ´æ·ÖÅäÐèÇóʱ£¬½«Å׳öOutOfMemoryError Òì³£¡£ÖµµÃ×¢ÒâµÄÊÇÔÚ·½·¨ÇøÖдæÔÚÒ»¸ö½ÐÔËÐÐʱ³£Á¿³Ø(Runtime Constant Pool)µÄÇøÓò£¬ËüÖ÷ÒªÓÃÓÚ´æ·Å±àÒëÆ÷Éú³ÉµÄ¸÷ÖÖ×ÖÃæÁ¿ºÍ·ûºÅÒýÓã¬ÕâЩÄÚÈݽ«ÔÚÀà¼ÓÔØºó´æ·Åµ½ÔËÐÐʱ³£Á¿³ØÖУ¬ÒÔ±ãºóÐøÊ¹Óá£

·JVM¶Ñ(Java Heap)

Java ¶ÑÒ²ÊÇÊôÓÚÏ̹߳²ÏíµÄÄÚ´æÇøÓò£¬ËüÔÚÐéÄâ»úÆô¶¯Ê±´´½¨£¬ÊÇJava ÐéÄâ»úËù¹ÜÀíµÄÄÚ´æÖÐ×î´óµÄÒ»¿é£¬Ö÷ÒªÓÃÓÚ´æ·Å¶ÔÏóʵÀý£¬¼¸ºõËùÓеĶÔÏóʵÀý¶¼ÔÚÕâÀï·ÖÅäÄڴ棬עÒâJava ¶ÑÊÇÀ¬»øÊÕ¼¯Æ÷¹ÜÀíµÄÖ÷񻂿Óò£¬Òò´ËºÜ¶àʱºòÒ²±»³Æ×öGC ¶Ñ£¬Èç¹ûÔÚ¶ÑÖÐûÓÐÄÚ´æÍê³ÉʵÀý·ÖÅ䣬²¢ÇÒ¶ÑÒ²ÎÞ·¨ÔÙÀ©Õ¹Ê±£¬½«»áÅ׳öOutOfMemoryErrorÒì³£¡£

·³ÌÐò¼ÆÊýÆ÷(Program Counter Register)

ÊôÓÚÏß³Ì˽ÓеÄÊý¾ÝÇøÓò£¬ÊÇһС¿éÄÚ´æ¿Õ¼ä£¬Ö÷Òª´ú±íµ±Ç°Ïß³ÌËùÖ´ÐеÄ×Ö½ÚÂëÐкÅָʾÆ÷¡£×Ö½ÚÂë½âÊÍÆ÷¹¤×÷ʱ£¬Í¨¹ý¸Ä±äÕâ¸ö¼ÆÊýÆ÷µÄÖµÀ´Ñ¡È¡ÏÂÒ»ÌõÐèÒªÖ´ÐеÄ×Ö½ÚÂëÖ¸Á·ÖÖ§¡¢Ñ­»·¡¢Ìø×ª¡¢Òì³£´¦Àí¡¢Ïָ̻߳´µÈ»ù´¡¹¦Äܶ¼ÐèÒªÒÀÀµÕâ¸ö¼ÆÊýÆ÷À´Íê³É¡£

·ÐéÄâ»úÕ»(Java Virtual Machine Stacks)

ÊôÓÚÏß³Ì˽ÓеÄÊý¾ÝÇøÓò£¬ÓëÏß³Ìͬʱ´´½¨£¬×ÜÊýÓëÏ̹߳ØÁª£¬´ú±íJava·½·¨Ö´ÐеÄÄÚ´æÄ£ÐÍ¡£Ã¿¸ö·½·¨Ö´ÐÐʱ¶¼»á´´½¨Ò»¸öÕ»èåÀ´´æ´¢·½·¨µÄµÄ±äÁ¿±í¡¢²Ù×÷ÊýÕ»¡¢¶¯Ì¬Á´½Ó·½·¨¡¢·µ»ØÖµ¡¢·µ»ØµØÖ·µÈÐÅÏ¢¡£Ã¿¸ö·½·¨´Óµ÷ÓÃÖ±½áÊø¾Í¶ÔÓÚÒ»¸öÕ»èåÔÚÐéÄâ»úÕ»ÖеÄÈëÕ»ºÍ³öÕ»¹ý³Ì¡£

·±¾µØ·½·¨Õ»(Native Method Stacks)

±¾µØ·½·¨Õ»ÊôÓÚÏß³Ì˽ÓеÄÊý¾ÝÇøÓò£¬Õⲿ·ÖÖ÷ÒªÓëÐéÄâ»úÓõ½µÄ Native ·½·¨Ïà¹Ø£¬Ò»°ãÇé¿öÏ£¬ÎÒÃÇÎÞÐè¹ØÐÄ´ËÇøÓò¡£

JavaÄÚ´æÄ£ÐÍÓëÓ²¼þÄÚ´æ¼Ü¹¹µÄ¹ØÏµ

ͨ¹ý¶ÔÇ°ÃæµÄÓ²¼þÄÚ´æ¼Ü¹¹¡¢JavaÄÚ´æÄ£ÐÍÒÔ¼°Java¶àÏ̵߳ÄʵÏÖÔ­ÀíµÄÁ˽⣬ÎÒÃÇÓ¦¸ÃÒѾ­Òâʶµ½£¬¶àÏ̵߳ÄÖ´ÐÐ×îÖÕ¶¼»áÓ³Éäµ½Ó²¼þ´¦ÀíÆ÷ÉϽøÐÐÖ´ÐУ¬µ«JavaÄÚ´æÄ£ÐͺÍÓ²¼þÄÚ´æ¼Ü¹¹²¢²»ÍêȫһÖ¡£¶ÔÓÚÓ²¼þÄÚ´æÀ´ËµÖ»ÓмĴæÆ÷¡¢»º´æÄÚ´æ¡¢Ö÷ÄÚ´æµÄ¸ÅÄ²¢Ã»Óй¤×÷ÄÚ´æ(Ïß³Ì˽ÓÐÊý¾ÝÇøÓò)ºÍÖ÷ÄÚ´æ(¶ÑÄÚ´æ)Ö®·Ö£¬Ò²¾ÍÊÇ˵JavaÄÚ´æÄ£ÐͶÔÄÚ´æµÄ»®·Ö¶ÔÓ²¼þÄڴ沢ûÓÐÈκÎÓ°Ï죬ÒòΪJMMÖ»ÊÇÒ»ÖÖ³éÏóµÄ¸ÅÄÊÇÒ»×鹿Ôò£¬²¢²»Êµ¼Ê´æÔÚ£¬²»¹ÜÊǹ¤×÷ÄÚ´æµÄÊý¾Ý»¹ÊÇÖ÷ÄÚ´æµÄÊý¾Ý£¬¶ÔÓÚ¼ÆËã»úÓ²¼þÀ´Ëµ¶¼»á´æ´¢ÔÚ¼ÆËã»úÖ÷ÄÚ´æÖУ¬µ±È»Ò²ÓпÉÄÜ´æ´¢µ½CPU»º´æ»òÕ߼ĴæÆ÷ÖУ¬Òò´Ë×ÜÌåÉÏÀ´Ëµ£¬JavaÄÚ´æÄ£ÐͺͼÆËã»úÓ²¼þÄÚ´æ¼Ü¹¹ÊÇÒ»¸öÏ໥½»²æµÄ¹ØÏµ£¬ÊÇÒ»ÖÖ³éÏó¸ÅÄî»®·ÖÓëÕæÊµÎïÀíÓ²¼þµÄ½»²æ¡£(×¢Òâ¶ÔÓÚJavaÄÚ´æÇøÓò»®·ÖÒ²ÊÇͬÑùµÄµÀÀí)

jvmÄÚ´æÄ£ÐÍ07

JMM´æÔڵıØÒªÐÔ

ÔÚÃ÷°×ÁËJavaÄÚ´æÇøÓò»®·Ö¡¢Ó²¼þÄÚ´æ¼Ü¹¹¡¢Java¶àÏ̵߳ÄʵÏÖÔ­ÀíÓëJavaÄÚ´æÄ£Ð͵ľßÌå¹ØÏµºó£¬½Ó×ÅÀ´Ì¸Ì¸JavaÄÚ´æÄ£ÐÍ´æÔڵıØÒª ÐÔ¡£ÓÉÓÚJVMÔËÐгÌÐòµÄʵÌåÊÇỊ̈߳¬¶øÃ¿¸öÏ̴߳´½¨Ê±JVM¶¼»áΪÆä´´½¨Ò»¸ö¹¤×÷ÄÚ´æ(ÓÐЩµØ·½³ÆÎªÕ»¿Õ¼ä)£¬ÓÃÓÚ´æ´¢Ïß³Ì˽ÓеÄÊý¾Ý£¬Ïß³ÌÓëÖ÷ÄÚ´æÖÐ µÄ±äÁ¿²Ù×÷±ØÐëͨ¹ý¹¤×÷ÄÚ´æ¼ä½ÓÍê³É£¬Ö÷Òª¹ý³ÌÊǽ«±äÁ¿´ÓÖ÷Äڴ濽±´µÄÿ¸öÏ̸߳÷×ԵŤ×÷ÄÚ´æ¿Õ¼ä£¬È»ºó¶Ô±äÁ¿½øÐвÙ×÷£¬²Ù×÷Íê³ÉºóÔÙ½«±äÁ¿Ð´»ØÖ÷Äڴ棬 Èç¹û´æÔÚÁ½¸öÏß³Ìͬʱ¶ÔÒ»¸öÖ÷ÄÚ´æÖеÄʵÀý¶ÔÏóµÄ±äÁ¿½øÐвÙ×÷¾ÍÓпÉÄÜÓÕ·¢Ḭ̈߳²È«ÎÊÌâ¡£

ÈçÏÂͼ£¬Ö÷ÄÚ´æÖдæÔÚÒ»¸ö¹²Ïí±äÁ¿x£¬ÏÖÔÚÓÐAºÍBÁ½ÌõÏ̷ֱ߳ð¶Ô¸Ã±äÁ¿x=1½øÐвÙ×÷£¬A/BÏ̸߳÷×ԵŤ×÷ÄÚ´æÖдæÔÚ¹²Ïí±äÁ¿¸±±¾x¡£¼ÙÉèÏÖÔÚAÏß³ÌÏëÒªÐÞ¸ÄxµÄֵΪ2£¬¶øBÏß³ÌÈ´ÏëÒª¶ÁÈ¡xµÄÖµ£¬ÄÇôBÏ̶߳ÁÈ¡ µ½µÄÖµÊÇAÏ̸߳üкóµÄÖµ2»¹ÊǸüÐÂǰµÄÖµ1ÄØ?´ð°¸ÊÇ£¬²»È·¶¨£¬¼´BÏß³ÌÓпÉÄܶÁÈ¡µ½AÏ̸߳üÐÂǰµÄÖµ1£¬Ò²ÓпÉÄܶÁÈ¡µ½AÏ̸߳üкóµÄÖµ2£¬ÕâÊÇÒòΪ ¹¤×÷ÄÚ´æÊÇÿ¸öÏß³Ì˽ÓеÄÊý¾ÝÇøÓò£¬¶øÏß³ÌA±äÁ¿xʱ£¬Ê×ÏÈÊǽ«±äÁ¿´ÓÖ÷Äڴ濽±´µ½AÏ̵߳Ť×÷ÄÚ´æÖУ¬È»ºó¶Ô±äÁ¿½øÐвÙ×÷£¬²Ù×÷Íê³ÉºóÔÙ½«±äÁ¿xд»ØÖ÷ ÄÚ£¬¶ø¶ÔÓÚBÏ̵߳ÄÒ²ÊÇÀàËÆµÄ£¬ÕâÑù¾ÍÓпÉÄÜÔì³ÉÖ÷ÄÚ´æÓ빤×÷ÄÚ´æ¼äÊý¾Ý´æÔÚÒ»ÖÂÐÔÎÊÌ⣬¼ÙÈçAÏß³ÌÐÞ¸ÄÍêºóÕýÔÚ½«Êý¾Ýд»ØÖ÷Äڴ棬¶øBÏ̴߳ËʱÕýÔÚ¶ÁÈ¡ Ö÷Äڴ棬¼´½«x=1¿½±´µ½×Ô¼ºµÄ¹¤×÷ÄÚ´æÖУ¬ÕâÑùBÏ̶߳ÁÈ¡µ½µÄÖµ¾ÍÊÇx=1£¬µ«Èç¹ûAÏß³ÌÒѽ«x=2д»ØÖ÷ÄÚ´æºó£¬BÏ̲߳ſªÊ¼¶ÁÈ¡µÄ»°£¬ÄÇô´ËʱBÏß ³Ì¶ÁÈ¡µ½µÄ¾ÍÊÇx=2£¬µ«µ½µ×ÊÇÄÄÖÖÇé¿öÏÈ·¢ÉúÄØ?ÕâÊDz»È·¶¨µÄ£¬ÕâÒ²¾ÍÊÇËùνµÄḬ̈߳²È«ÎÊÌâ¡£

jvmÄÚ´æÄ£ÐÍ08

ΪÁ˽â¾öÀàËÆÉÏÊöµÄÎÊÌ⣬JVM¶¨ÒåÁËÒ»×鹿Ôò£¬Í¨¹ýÕâ×鹿ÔòÀ´¾ö¶¨Ò»¸öÏ̶߳Թ²Ïí±äÁ¿µÄдÈëºÎʱ¶ÔÁíÒ»¸öÏ߳̿ɼû£¬Õâ×鹿ÔòÒ²³ÆÎªJavaÄÚ´æÄ£ÐÍ(¼´JMM)£¬JMMÊÇÎ§ÈÆ×ųÌÐòÖ´ÐеÄÔ­×ÓÐÔ¡¢ÓÐÐòÐÔ¡¢¿É¼ûÐÔÕ¹¿ªµÄ£¬ÏÂÃæÎÒÃÇ¿´¿´ÕâÈý¸öÌØÐÔ¡£

ÄÚ´æ¼ä½»»¥²Ù×÷

¹ØÓÚÖ÷ÄÚ´æÓ빤×÷ÄÚ´æÖ®¼ä¾ßÌåµÄ½»»¥Ð­Ò飬¼´Ò»¸ö±äÁ¿ÈçºÎ´ÓÖ÷Äڴ濽±´µ½¹¤×÷ÄÚ ´æ¡¢ÈçºÎ´Ó¹¤×÷ÄÚ´æÍ¬²½»ØÖ÷ÄÚ´æÖ®ÀàµÄʵÏÖϸ½Ú£¬JavaÄÚ´æÄ£ÐÍÖж¨ÒåÁËÒÔÏÂ8ÖÖ²Ù×÷À´Íê³É£¬ÐéÄâ»úʵÏÖʱ±ØÐë±£Ö¤ÏÂÃæÌá¼°µÄÿһÖÖ²Ù×÷¶¼ÊÇÔ­×ӵġ¢²»¿ÉÔٷֵġ£lock(Ëø¶¨)£º×÷ÓÃÓÚÖ÷ÄÚ´æµÄ±äÁ¿£¬Ëü°ÑÒ»¸ö±äÁ¿±êʶΪһÌõÏ̶߳ÀÕ¼µÄ״̬¡£

unlock(½âËø)£º×÷ÓÃÓÚÖ÷ÄÚ´æµÄ±äÁ¿£¬Ëü°ÑÒ»¸ö´¦ÓÚËø¶¨×´Ì¬µÄ±äÁ¿ÊͷųöÀ´£¬ÊͷźóµÄ±äÁ¿²Å¿ÉÒÔ±»ÆäËûÏß³ÌËø¶¨¡£

read(¶ÁÈ¡)£º×÷ÓÃÓÚÖ÷ÄÚ´æµÄ±äÁ¿£¬Ëü°ÑÒ»¸ö±äÁ¿µÄÖµ´ÓÖ÷ÄÚ´æ´«Êäµ½Ï̵߳Ť×÷ÄÚ´æÖУ¬ÒÔ±ãËæºóµÄload¶¯×÷ʹÓá£

load(ÔØÈë)£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æµÄ±äÁ¿£¬Ëü°Ñread²Ù×÷´ÓÖ÷ÄÚ´æÖеõ½µÄ±äÁ¿Öµ·ÅÈ빤×÷ÄÚ´æµÄ±äÁ¿¸±±¾ÖС£

use(ʹÓÃ)£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æµÄ±äÁ¿£¬Ëü°Ñ¹¤×÷ÄÚ´æÖÐÒ»¸ö±äÁ¿µÄÖµ´«µÝ¸øÖ´ÐÐÒýÇæ£¬Ã¿µ±ÐéÄâ»úÓöµ½Ò»¸öÐèҪʹÓõ½±äÁ¿µÄÖµµÄ×Ö½ÚÂëÖ¸Áîʱ½«»áÖ´ÐÐÕâ¸ö²Ù×÷¡£

assign(¸³Öµ)£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æµÄ±äÁ¿£¬Ëü°ÑÒ»¸ö´ÓÖ´ÐÐÒýÇæ½ÓÊÕµ½µÄÖµ¸³¸ø¹¤×÷ÄÚ´æµÄ±äÁ¿£¬Ã¿µ±ÐéÄâ»úÓöµ½Ò»¸ö¸ø±äÁ¿¸³ÖµµÄ×Ö½ÚÂëÖ¸ÁîʱִÐÐÕâ¸ö²Ù×÷¡£

store(´æ´¢)£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æµÄ±äÁ¿£¬Ëü°Ñ¹¤×÷ÄÚ´æÖÐÒ»¸ö±äÁ¿µÄÖµ´«Ë͵½Ö÷ÄÚ´æÖУ¬ÒÔ±ãËæºóµÄwrite²Ù×÷ʹÓá£

write(дÈë)£º×÷ÓÃÓÚÖ÷ÄÚ´æµÄ±äÁ¿£¬Ëü°Ñstore²Ù×÷´Ó¹¤×÷ÄÚ´æÖеõ½µÄ±äÁ¿µÄÖµ·ÅÈëÖ÷ÄÚ´æµÄ±äÁ¿ÖС£

Èç¹ûÒª°ÑÒ»¸ö±äÁ¿´ÓÖ÷ÄÚ´æ¸´ÖÆµ½¹¤×÷Äڴ棬ÄǾÍҪ˳ÐòµØÖ´ÐÐreadºÍload²Ù×÷£¬Èç¹ûÒª°Ñ±äÁ¿´Ó¹¤×÷ÄÚ´æÍ¬²½»ØÖ÷Äڴ棬¾ÍҪ˳ÐòµØÖ´ÐÐstoreºÍwrite²Ù×÷¡£×¢Ò⣬JavaÄÚ´æÄ£ÐÍÖ»ÒªÇóÉÏÊöÁ½¸ö²Ù×÷±ØÐ밴˳ÐòÖ´ÐУ¬¶øÃ»Óб£Ö¤ÊÇÁ¬ÐøÖ´ÐС£Ò²¾ÍÊÇ˵£¬readÓëloadÖ®¼ä¡¢storeÓëwriteÖ®¼äÊǿɲåÈëÆäËûÖ¸ÁîµÄ£¬Èç¶ÔÖ÷ÄÚ´æÖеıäÁ¿a¡¢b½øÐзÃÎÊʱ£¬Ò»ÖÖ¿ÉÄܳöÏÖ˳ÐòÊÇread a¡¢read b¡¢load b¡¢load a¡£³ý´ËÖ®Í⣬JavaÄÚ´æÄ£ÐÍ»¹¹æ¶¨ÁËÔÚÖ´ÐÐÉÏÊö8ÖÖ»ù±¾²Ù×÷ʱ±ØÐëÂú×ãÈçϹæÔò£º

·²»ÔÊÐíreadºÍload¡¢storeºÍwrite²Ù×÷Ö®Ò»µ¥¶À³öÏÖ£¬¼´²»ÔÊÐíÒ»¸ö±äÁ¿´ÓÖ÷ÄÚ´æ¶ÁÈ¡Á˵«¹¤×÷ÄÚ´æ²»½ÓÊÜ£¬»òÕß´Ó¹¤×÷ÄÚ´æ·¢Æð»ØÐ´Á˵«Ö÷ÄÚ´æ²»½ÓÊܵÄÇé¿ö³öÏÖ¡£

·²»ÔÊÐíÒ»¸öÏ̶߳ªÆúËüµÄ×î½üµÄassign²Ù×÷£¬¼´±äÁ¿ÔÚ¹¤×÷ÄÚ´æÖиıäÁËÖ®ºó±ØÐë°Ñ¸Ã±ä»¯Í¬²½»ØÖ÷ÄÚ´æ¡£

·²»ÔÊÐíÒ»¸öÏß³ÌÎÞÔ­ÒòµØ(ûÓз¢Éú¹ýÈκÎassign²Ù×÷)°ÑÊý¾Ý´ÓÏ̵߳Ť×÷ÄÚ´æÍ¬²½»ØÖ÷ÄÚ´æÖС£

·Ò»¸öеıäÁ¿Ö»ÄÜÔÚÖ÷ÄÚ´æÖГµ®Éú”£¬²»ÔÊÐíÔÚ¹¤×÷ÄÚ´æÖÐÖ±½ÓʹÓÃÒ»¸öδ±»³õʼ»¯(load»òassign)µÄ±äÁ¿£¬»»¾ä»°Ëµ£¬¾ÍÊǶÔÒ»¸ö±äÁ¿ÊµÊ©use¡¢store²Ù×÷֮ǰ£¬±ØÐëÏÈÖ´ÐйýÁËassignºÍload²Ù×÷¡£

·Ò»¸ö±äÁ¿ÔÚͬһ¸öʱ¿ÌÖ»ÔÊÐíÒ»ÌõÏß³Ì¶ÔÆä½øÐÐlock²Ù×÷£¬µ«lock²Ù×÷¿ÉÒÔ±»Í¬Ò»ÌõÏß³ÌÖØ¸´Ö´Ðжà´Î£¬¶à´ÎÖ´ÐÐlockºó£¬Ö»ÓÐÖ´ÐÐÏàͬ´ÎÊýµÄunlock²Ù×÷£¬±äÁ¿²Å»á±»½âËø¡£

·Èç¹û¶ÔÒ»¸ö±äÁ¿Ö´ÐÐlock²Ù×÷£¬Äǽ«»áÇå¿Õ¹¤×÷ÄÚ´æÖд˱äÁ¿µÄÖµ£¬ÔÚÖ´ÐÐÒýÇæÊ¹ÓÃÕâ¸ö±äÁ¿Ç°£¬ÐèÒªÖØÐÂÖ´ÐÐload»òassign²Ù×÷³õʼ»¯±äÁ¿µÄÖµ

·Èç¹ûÒ»¸ö±äÁ¿ÊÂÏÈûÓб»lock²Ù×÷Ëø¶¨£¬ÄǾͲ»ÔÊÐí¶ÔËüÖ´ÐÐunlock²Ù×÷£¬Ò²²»ÔÊÐíÈ¥unlockÒ»¸ö±»ÆäËûÏß³ÌËø¶¨×¡µÄ±äÁ¿¡£

·¶ÔÒ»¸ö±äÁ¿Ö´ÐÐunlock²Ù×÷֮ǰ£¬±ØÐëÏȰѴ˱äÁ¿Í¬²½»ØÖ÷ÄÚ´æÖÐ(Ö´ÐÐstore¡¢write²Ù×÷)¡£

Õâ8ÖÖÄÚ´æ·ÃÎʲÙ×÷ÒÔ¼°ÉÏÊö¹æÔòÏÞ¶¨£¬ÔÙ¼ÓÉÏÉÔºó½éÉܵĶÔvolatileµÄÒ»Ð©ÌØÊâ¹æ¶¨£¬¾ÍÒѾ­Íêȫȷ¶¨ÁËJava³ÌÐòÖÐÄÄЩÄÚ´æ·ÃÎʲÙ×÷ÔÚ²¢·¢ÏÂÊǰ²È«µÄ¡£ÓÉÓÚÕâÖÖ¶¨ÒåÏ൱ÑϽ÷µ«ÓÖÊ®·Ö·³Ëö£¬Êµ¼ùÆðÀ´ºÜÂé·³£¬ËùÒÔÔÚ12.3.6½ÚÖбÊÕß½«½éÉÜÕâÖÖ¶¨ÒåµÄÒ»¸öµÈЧÅжÏÔ­Ôò——ÏÈÐз¢ÉúÔ­Ôò£¬ÓÃÀ´È·¶¨Ò»¸ö·ÃÎÊÔÚ²¢·¢»·¾³ÏÂÊÇ·ñ°²È«¡£

Ô­×ÓÐÔ¡¢¿É¼ûÐÔÓëÓÐÐòÐÔ

Ô­×ÓÐÔ

Ô­×ÓÐÔÖ¸µÄÊÇÒ»¸ö²Ù×÷ÊDz»¿ÉÖжϵÄ£¬¼´Ê¹ÊÇÔÚ¶àÏ̻߳·¾³Ï£¬Ò»¸ö²Ù×÷Ò»µ©¿ªÊ¼¾Í²»»á±»ÆäËûÏß³ÌÓ°Ïì¡£ÓÉJavaÄÚ´æÄ£ÐÍÀ´Ö±½Ó±£Ö¤µÄÔ­×ÓÐÔ±äÁ¿²Ù×÷°üÀ¨read¡¢load¡¢assign¡¢use¡¢storeºÍwrite£¬ÎÒÃÇ´óÖ¿ÉÒÔÈÏΪ»ù±¾Êý¾ÝÀàÐ͵ķÃÎʶÁдÊǾ߱¸Ô­×ÓÐԵ쬵«ÊǶÔÓÚ64λµÄÊý¾ÝÀàÐÍ(longºÍdouble)£¬ÔÚÄ£ÐÍÖÐÌØ±ð¶¨ÒåÁËÒ»ÌõÏà¶Ô¿íËɵĹ涨£ºÔÊÐíÐéÄâ»ú½«Ã»Óб»volatileÐÞÊεÄ64λÊý¾ÝµÄ¶Áд²Ù×÷»®·ÖΪÁ½´Î32λµÄ²Ù×÷À´½øÐУ¬ÕâÑù»áµ¼ÖÂÒ»¸öÏß³ÌÔÚдʱ£¬²Ù×÷Íêǰ32λµÄÔ­×Ó²Ù×÷ºó£¬ÂÖµ½BÏ̶߳Áȡʱ£¬Ç¡ºÃÖ»¶ÁÈ¡µ½Á˺ó32λµÄÊý¾Ý£¬ÕâÑù¿ÉÄÜ»á¶ÁÈ¡µ½Ò»¸ö¼È·ÇÔ­ÖµÓÖ²»ÊÇÏß³ÌÐÞ¸ÄÖµµÄ±äÁ¿£¬Ëü¿ÉÄÜÊÇ“°ë¸ö±äÁ¿”µÄÊýÖµ£¬¼´64λÊý¾Ý±»Á½¸öÏ̷ֳ߳ÉÁËÁ½´Î¶ÁÈ¡¡£µ«Ò²²»±ØÌ«µ£ÐÄ£¬ÒòΪ¶ÁÈ¡µ½“°ë¸ö±äÁ¿”µÄÇé¿ö±È½ÏÉÙ ¼û£¬ÖÁÉÙÔÚĿǰµÄÉÌÓõÄÐéÄâ»úÖУ¬¼¸ºõ¶¼°Ñ64λµÄÊý¾ÝµÄ¶Áд²Ù×÷×÷Ϊԭ×Ó²Ù×÷À´Ö´ÐУ¬Òò´Ë¶ÔÓÚÕâ¸öÎÊÌâ²»±ØÌ«ÔÚÒ⣬֪µÀÕâô»ØÊ¼´¿É¡£

Èç¹ûÓ¦Óó¡¾°ÐèÒªÒ»¸ö¸ü´ó·¶Î§µÄÔ­×ÓÐÔ±£Ö¤(¾­³£»áÓöµ½)£¬JavaÄÚ´æÄ£ÐÍ»¹ÌṩÁËlockºÍunlock²Ù×÷À´Âú×ãÕâÖÖÐèÇ󣬾¡¹ÜÐéÄâ»úδ°ÑlockºÍunlock²Ù×÷Ö±½Ó¿ª·Å¸øÓû§Ê¹Ó㬵«ÊÇÈ´ÌṩÁ˸ü¸ß²ã´ÎµÄ×Ö½ÚÂëÖ¸ÁîmonitorenterºÍmonitorexitÀ´ÒþʽµØÊ¹ÓÃÕâÁ½¸ö²Ù×÷£¬ÕâÁ½¸ö×Ö½ÚÂëÖ¸Áî·´Ó³µ½Java´úÂëÖоÍÊÇͬ²½¿é——synchronized¹Ø¼ü×Ö£¬Òò´ËÔÚsynchronized¿éÖ®¼äµÄ²Ù×÷Ò²¾ß±¸Ô­×ÓÐÔ¡£

¿É¼ûÐÔ

¿É¼ûÐÔÊÇÖ¸µ±Ò»¸öÏß³ÌÐÞ¸ÄÁ˹²Ïí±äÁ¿µÄÖµ£¬ÆäËûÏß³ÌÄܹ»Á¢¼´µÃÖªÕâ¸öÐ޸ġ£¶ÔÓÚ´®ÐгÌÐòÀ´Ëµ£¬¿É¼ûÐÔÎÊÌâÊDz»´æÔڵģ¬ÒòΪÎÒÃÇÔÚÈκÎÒ»¸ö²Ù×÷ÖÐÐÞ¸ÄÁËij¸ö±äÁ¿µÄÖµ£¬ºóÐøµÄ²Ù×÷Öж¼ÄܶÁÈ¡Õâ¸ö±äÁ¿Öµ£¬²¢ÇÒÊÇÐ޸ĹýµÄÐÂÖµ¡£µ«ÔÚ¶àÏ̻߳·¾³ÖпɾͲ»Ò»¶¨ÁË£¬ Ç°ÃæÎÒÃÇ·ÖÎö¹ý£¬ÓÉÓÚÏ̶߳Թ²Ïí±äÁ¿µÄ²Ù×÷¶¼ÊÇÏ߳̿½±´µ½¸÷×ԵŤ×÷ÄÚ´æ½øÐвÙ×÷ºó²Åд»Øµ½Ö÷ÄÚ´æÖеģ¬Õâ¾Í¿ÉÄÜ´æÔÚÒ»¸öÏß³ÌAÐÞ¸ÄÁ˹²Ïí±äÁ¿xµÄÖµ£¬»¹Î´Ð´»ØÖ÷ÄÚ´æÊ±£¬ÁíÍâÒ»¸öÏß³ÌBÓÖ¶ÔÖ÷ÄÚ´æÖÐͬһ¸ö¹²Ïí±äÁ¿x½øÐвÙ×÷£¬µ«´ËʱAÏ̹߳¤×÷ÄÚ´æÖй²Ïí±äÁ¿x¶ÔÏß³ÌBÀ´Ëµ²¢²»¿É¼û£¬ÕâÖÖ¹¤×÷ÄÚ´æÓëÖ÷ÄÚ´æÍ¬²½ÑÓ³ÙÏÖÏó¾Í»áÔì³É¿É¼ûÐÔÎÊÌâ¡£

ÓÐÐòÐÔ

ÓÐÐòÐÔÊÇÖ¸¶ÔÓÚµ¥Ï̵߳ÄÖ´ÐдúÂ룬ÎÒÃÇ×ÜÊÇÈÏΪ´úÂëµÄÖ´ÐÐÊǰ´Ë³ÐòÒÀ´ÎÖ´ÐеÄ£¬ÕâÑùµÄÀí½â²¢Ã»ÓÐ벡£¬±Ï¾¹¶ÔÓÚµ¥Ï̶߳øÑÔȷʵÈç´Ë£¬µ«¶ÔÓÚ¶àÏ̻߳·¾³£¬Ôò¿ÉÄܳöÏÖÂÒÐòÏÖÏó£¬ÒòΪ³ÌÐò±àÒë³É»úÆ÷ÂëÖ¸Áîºó¿ÉÄÜ»á³öÏÖÖ¸ÁîÖØÅÅÏÖÏó£¬ÖØÅźóµÄÖ¸ÁîÓëÔ­Ö¸ÁîµÄ˳Ðòδ±ØÒ»Ö£¬ÒªÃ÷°×µÄÊÇ£¬ÔÚJava³ÌÐòÖУ¬ÌÈÈôÔÚ±¾Ïß³ÌÄÚ£¬ËùÓвÙ×÷¶¼ÊÓΪÓÐÐòÐÐΪ£¬Èç¹ûÊǶàÏ̻߳·¾³Ï£¬Ò»¸öÏß³ÌÖй۲ìÁíÍâÒ»¸öỊ̈߳¬ËùÓвÙ×÷¶¼ÊÇÎÞÐòµÄ£¬Ç°°ë¾äÖ¸µÄÊǵ¥Ïß³ÌÄÚ±£Ö¤´®ÐÐÓïÒåÖ´ÐеÄÒ» ÖÂÐÔ£¬ºó°ë¾äÔòÖ¸Ö¸ÁîÖØÅÅÏÖÏóºÍ¹¤×÷ÄÚ´æÓëÖ÷ÄÚ´æÍ¬²½ÑÓ³ÙÏÖÏó¡£

JMMÌṩµÄ½â¾ö·½°¸

ÔÚÀí½âÁËÔ­×ÓÐÔ£¬¿É¼ûÐÔÒÔ¼°ÓÐÐòÐÔÎÊÌâºó£¬¿´¿´JMMÊÇÈçºÎ±£Ö¤µÄ£¬ÔÚJavaÄÚ´æÄ£ÐÍÖж¼ÌṩһÌ×½â¾ö·½°¸¹©Java¹¤³ÌʦÔÚ¿ª·¢¹ý³ÌʹÓã¬ÈçÔ­×ÓÐÔÎÊÌ⣬³ýÁËJVM×ÔÉíÌṩµÄ¶Ô»ù±¾Êý¾ÝÀàÐͶÁд²Ù×÷µÄÔ­×ÓÐÔÍ⣬¶ÔÓÚ·½·¨¼¶±ð»òÕß´úÂë¿é¼¶±ðµÄÔ­×ÓÐÔ²Ù×÷£¬¿ÉÒÔʹÓÃsynchronized¹Ø¼ü×Ö»ò ÕßÖØÈëËø(ReentrantLock)±£Ö¤³ÌÐòÖ´ÐеÄÔ­×ÓÐÔ¡£ ¶ø¹¤×÷ÄÚ´æÓëÖ÷ÄÚ´æÍ¬²½ÑÓ³ÙÏÖÏóµ¼ÖµĿɼûÐÔÎÊÌ⣬¿ÉÒÔʹÓÃsynchronized¹Ø¼ü×Ö»òÕßvolatile¹Ø¼ü×Ö½â¾ö£¬ËüÃǶ¼¿ÉÒÔʹһ¸öÏß³ÌÐ޸ĺó µÄ±äÁ¿Á¢¼´¶ÔÆäËûÏ߳̿ɼû¡£¶ÔÓÚÖ¸ÁîÖØÅŵ¼ÖµĿɼûÐÔÎÊÌâºÍÓÐÐòÐÔÎÊÌ⣬Ôò¿ÉÒÔÀûÓÃvolatile¹Ø¼ü×Ö½â¾ö£¬ÒòΪvolatileµÄÁíÍâÒ»¸ö×÷ÓþÍÊÇ ½ûÖ¹ÖØÅÅÐòÓÅ»¯£¬¹ØÓÚvolatileÉÔºó»á½øÒ»²½·ÖÎö¡£³ýÁË¿¿sychronizedºÍvolatile¹Ø¼ü×ÖÀ´±£Ö¤Ô­×ÓÐÔ¡¢¿É¼ûÐÔÒÔ¼°ÓÐÐòÐÔÍ⣬JMMÄÚ²¿»¹¶¨ÒåÒ»Ì×happens-beforeÔ­ÔòÀ´±£Ö¤¶àÏ̻߳·¾³ÏÂÁ½¸ö²Ù×÷¼äµÄÔ­×ÓÐÔ¡¢¿É¼ûÐÔÒÔ¼°ÓÐÐòÐÔ¡£ÍƼöÁ˽âÀÖÓã²¥¿ÍjavaÅàѵ¿Î³Ì¡£

volatileÄÚ´æÓïÒå

volatileÊÇJavaÐéÄâ»úÌṩµÄÇáÁ¿¼¶µÄͬ²½»úÖÆ¡£volatile¹Ø¼ü×ÖÓÐÈçÏÂÈý¸ö×÷Óãº

·ÔÚ¹¤×÷ÄÚ´æÖУ¬Ã¿´ÎʹÓÃvolatileÐÞÊεıäÁ¿Ç°¶¼±ØÐëÏÈ´ÓÖ÷ÄÚ´æË¢ÐÂ×îеÄÖµ£¬ÓÃÓÚ±£Ö¤ÄÜ¿´¼ûÆäËûÏ̶߳ÔvolatileÐÞÊεıäÁ¿Ëù×öµÄÐ޸ĺóµÄÖµ

·ÒªÇóÔÚ¹¤×÷ÄÚ´æÖУ¬Ã¿´ÎÐÞ¸ÄvolatileÐÞÊεıäÁ¿ºó¶¼±ØÐëÁ¢¿Ìͬ²½»ØÖ÷ÄÚ´æÖУ¬ÓÃÓÚ±£Ö¤ÆäËûÏ߳̿ÉÒÔ¿´µ½×Ô¼º¶ÔvolatileÐÞÊεıäÁ¿Ëù×öµÄÐÞ¸Ä

·ÒªÇóvolatileÐÞÊεıäÁ¿²»»á±»Ö¸ÁîÖØÅÅÐòÓÅ»¯£¬±£Ö¤´úÂëµÄÖ´ÐÐ˳ÐòÓë³ÌÐòµÄ˳ÐòÏàͬ

ÏÈÐз¢ÉúÔ­Ôò

ÌÈÈôÔÚ³ÌÐò¿ª·¢ÖУ¬½ö¿¿sychronizedºÍvolatile¹Ø¼ü×ÖÀ´±£Ö¤Ô­×ÓÐÔ¡¢¿É¼ûÐÔÒÔ¼°ÓÐÐòÐÔ£¬ÄÇô±àд²¢·¢³ÌÐò¿ÉÄÜ»áÏÔµÃÊ®·ÖÂé·³£¬ÐÒ Ô˵ÄÊÇ£¬ÔÚJavaÄÚ´æÄ£ÐÍÖУ¬»¹ÌṩÁËhappens-before Ô­ÔòÀ´¸¨Öú±£Ö¤³ÌÐòÖ´ÐеÄÔ­×ÓÐÔ¡¢¿É¼ûÐÔÒÔ¼°ÓÐÐòÐÔµÄÎÊÌ⣬ËüÊÇÅжÏÊý¾ÝÊÇ·ñ´æÔÚ¾ºÕù¡¢Ïß³ÌÊÇ·ñ°²È«µÄÒÀ¾Ý£¬happens-before Ô­ÔòÄÚÈÝÈçÏÂ

³ÌÐò˳ÐòÔ­Ôò£¬¼´ÔÚÒ»¸öÏß³ÌÄÚ±ØÐë±£Ö¤ÓïÒå´®ÐÐÐÔ£¬Ò²¾ÍÊÇ˵°´ÕÕ´úÂë˳ÐòÖ´ÐС£

(1)Ëø¹æÔò£º½âËø(unlock)²Ù×÷±ØÈ»·¢ÉúÔÚºóÐøµÄͬһ¸öËøµÄ¼ÓËø(lock)֮ǰ£¬Ò²¾ÍÊÇ˵£¬Èç¹û¶ÔÓÚÒ»¸öËø½âËøºó£¬ÔÙ¼ÓËø£¬ÄÇô¼ÓËøµÄ¶¯×÷±ØÐëÔÚ½âËø¶¯×÷Ö®ºó(ͬһ¸öËø)¡£

(2)volatile¹æÔò£ºvolatile±äÁ¿µÄд£¬ÏÈ·¢ÉúÓÚ¶Á£¬Õâ±£Ö¤ÁËvolatile±äÁ¿µÄ¿É¼ûÐÔ£¬¼òµ¥µÄÀí½â¾ÍÊÇ£¬volatile±äÁ¿ÔÚÿ´Î±»Ï̷߳ÃÎÊʱ£¬¶¼Ç¿ÆÈ´ÓÖ÷ÄÚ ´æÖжÁ¸Ã±äÁ¿µÄÖµ£¬¶øµ±¸Ã±äÁ¿·¢Éú±ä»¯Ê±£¬ÓÖ»áÇ¿ÆÈ½«×îÐÂ

µÄֵˢе½Ö÷Äڴ棬ÈκÎʱ¿Ì£¬²»Í¬µÄÏß³Ì×ÜÊÇÄܹ»¿´µ½¸Ã±äÁ¿µÄ×îÐÂÖµ¡£

(3)Ïß³ÌÆô¶¯¹æÔò£ºÏ̵߳Ästart()·½·¨ÏÈÓÚËüµÄÿһ¸ö¶¯×÷£¬¼´Èç¹ûÏß³ÌAÔÚÖ´ÐÐÏß³ÌBµÄstart·½·¨Ö®Ç°ÐÞ¸ÄÁ˹²Ïí±äÁ¿µÄÖµ£¬ÄÇôµ±Ïß³ÌBÖ´ÐÐstart·½·¨Ê±£¬Ïß³ÌA¶Ô¹²Ïí±äÁ¿µÄÐ޸ĶÔÏß³ÌB¿É¼û

(4)´«µÝÐÔ£ºAÏÈÓÚB £¬BÏÈÓÚC ÄÇôA±ØÈ»ÏÈÓÚC

(5)Ïß³ÌÖÕÖ¹¹æÔò Ï̵߳ÄËùÓвÙ×÷ÏÈÓÚÏ̵߳ÄÖսᣬThread.join()·½·¨µÄ×÷ÓÃÊǵȴýµ±Ç°Ö´ÐеÄÏß³ÌÖÕÖ¹¡£

(6)ÔÚÏß³ÌBÖÕֹ֮ǰ£¬ÐÞ¸ÄÁ˹²Ïí±äÁ¿£¬Ïß³ÌA´ÓÏß³ÌBµÄjoin·½·¨³É¹¦·µ»Øºó£¬Ïß³ÌB¶Ô¹²Ïí±äÁ¿µÄÐ޸Ľ«¶ÔÏß³ÌA¿É¼û¡£

(7)Ïß³ÌÖжϹæÔò£º¶ÔÏß³Ì interrupt()·½·¨µÄµ÷ÓÃÏÈÐз¢ÉúÓÚ±»ÖжÏÏ̵߳ĴúÂë¼ì²âµ½ÖжÏʼþµÄ·¢Éú£¬¿ÉÒÔͨ¹ýThread.interrupted()·½·¨¼ì²âÏß³ÌÊÇ·ñÖжÏ¡£

(8)¶ÔÏóÖÕ½á¹æÔò£º¶ÔÏóµÄ¹¹Ô캯ÊýÖ´ÐУ¬½áÊøÏÈÓÚfinalize()·½·¨

ÉÏÊö8ÌõÔ­ÔòÎÞÐèÊÖ¶¯Ìí¼ÓÈκÎͬ²½ÊÖ¶Î(synchronized|volatile)¼´¿É´ïµ½Ð§¹û£¬ÏÂÃæÎÒÃǽáºÏÇ°ÃæµÄ°¸ÀýÑÝʾÕâ8ÌõÔ­ÔòÈçºÎÅжÏÏß³ÌÊÇ·ñ°²È«£¬ÈçÏ£º


class MixedOrder{
    int a = 0;
    boolean flag = false;
    public void writer(){
        a = 1;
        flag = true;
    }
    public void read(){
        if(flag){
            int i = a + 1;
        }
    }
}

ͬÑùµÄµÀÀí£¬´æÔÚÁ½ÌõÏß³ÌAºÍB£¬Ïß³ÌAµ÷ÓÃʵÀý¶ÔÏóµÄwriter()·½·¨£¬¶øÏß³ÌBµ÷ÓÃʵÀý¶ÔÏóµÄread()·½·¨£¬Ïß³ÌAÏÈÆô¶¯¶øÏß³ÌBºóÆô¶¯£¬ÄÇôÏß³ÌB¶ÁÈ¡µ½µÄiÖµÊǶàÉÙÄØ?ÏÖÔÚÒÀ¾Ý8ÌõÔ­Ôò£¬ÓÉÓÚ´æÔÚÁ½ÌõÏß³Ìͬʱµ÷Óã¬Òò´Ë³ÌÐò´ÎÐòÔ­Ôò²»ºÏÊÊ¡£writer()·½·¨ºÍread()·½·¨¶¼Ã»ÓÐʹÓÃͬ²½ÊֶΣ¬Ëø¹æÔòÒ²²»ºÏÊÊ¡£Ã»ÓÐʹÓÃvolatile¹Ø¼ü×Ö£¬volatile±äÁ¿Ô­Ôò²»ÊÊÓ¦¡£Ïß³ÌÆô¶¯¹æÔò¡¢Ïß³ÌÖÕÖ¹¹æÔò¡¢Ïß³ÌÖжϹæÔò¡¢¶ÔÏó½á¹æÔò¡¢´«µÝÐԺͱ¾´Î²âÊÔ°¸ÀýÒ²²»ºÏÊÊ¡£Ïß³ÌAºÍÏß³ÌBµÄÆô¶¯Ê±¼äËäÈ»ÓÐÏȺ󣬵«Ïß³ÌBÖ´Ðнá¹ûÈ´ÊDz»È·¶¨£¬Ò²ÊÇ˵ÉÏÊö´úÂëûÓÐÊʺÏ8ÌõÔ­ÔòÖеÄÈÎÒâÒ»£¬Ò²Ã»ÓÐʹÓÃÈκÎͬ²½ÊֶΣ¬ËùÒÔÉÏÊöµÄ²Ù×÷ÊÇÏ̲߳»°²È«µÄ£¬Òò´ËÏß³ÌB¶ÁÈ¡µÄÖµ×ÔȻҲÊDz»È·¶¨µÄ¡£ÐÞ¸´Õâ¸öÎÊÌâµÄ·½Ê½ºÜ¼òµ¥£¬ÒªÃ´¸øwriter()·½ ·¨ºÍread()·½·¨Ìí¼Óͬ²½ÊֶΣ¬Èçsynchronized»òÕ߸ø±äÁ¿flagÌí¼Óvolatile¹Ø¼ü×Ö£¬È·±£Ïß³ÌAÐ޸ĵÄÖµ¶ÔÏß³ÌB×ÜÊǿɼû¡£

ʱ¼äÏȺó˳ÐòÓëÏÈÐз¢ÉúÔ­ÔòÖ®¼ä»ù±¾Ã»ÓÐÌ«´óµÄ¹ØÏµ£¬ËùÒÔÎÒÃǺâÁ¿²¢·¢°²È«ÎÊÌâµÄʱºò²»ÒªÊܵ½Ê±¼ä˳ÐòµÄ¸ÉÈÅ£¬Ò»ÇбØÐëÒÔÏÈÐз¢ÉúÔ­ÔòΪ׼¡£

²ÂÄãϲ»¶£º

JVMÀ¬»ø»ØÊÕ»úÖÆÏêϸÊÓÆµ½Ì³Ì

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿