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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
JVM½éÉÜ
 
  2707  次浏览      28
 2018-1-9  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ cnblogs£¬ÎÄÖÐÖ÷Òª½²½âÁËJVMµÄ¸ÅÄ¹ÜÀí¼°Ö®¼äµÄ¹ØÏµ£¬ÃèÊöÁËÖ´ÐеĹý³ÌºÍÉúÃüÖÜÆÚ£¬Í¼Ê¾ÁËÌåϵ½á¹¹£¬Ïêϸ½â˵ÁËÔËÐÐÊÂÊý¾ÝÇøµÈ¡£

1. ʲôÊÇJVM£¿

JVMÊÇJava Virtual Machine£¨JavaÐéÄâ»ú£©µÄËõд£¬JVMÊÇÒ»ÖÖÓÃÓÚ¼ÆËãÉ豸µÄ¹æ·¶£¬ËüÊÇÒ»¸öÐé¹¹³öÀ´µÄ¼ÆËã»ú£¬ÊÇͨ¹ýÔÚʵ¼ÊµÄ¼ÆËã»úÉÏ·ÂտģÄâ¸÷ÖÖ¼ÆËã»ú¹¦ÄÜÀ´ÊµÏֵġ£JavaÐéÄâ»ú°üÀ¨Ò»Ì××Ö½ÚÂëÖ¸Á¡¢Ò»×é¼Ä´æÆ÷¡¢Ò»¸öÕ»¡¢Ò»¸öÀ¬»ø»ØÊնѺÍÒ»¸ö´æ´¢·½·¨Óò¡£ JVMÆÁ±ÎÁËÓë¾ßÌå²Ù×÷ϵͳƽ̨Ïà¹ØµÄÐÅÏ¢£¬Ê¹Java³ÌÐòÖ»ÐèÉú³ÉÔÚJavaÐéÄâ»úÉÏÔËÐеÄÄ¿±ê´úÂ루×Ö½ÚÂ룩,¾Í¿ÉÒÔÔÚ¶àÖÖÆ½Ì¨Éϲ»¼ÓÐ޸ĵØÔËÐС£JVMÔÚÖ´ÐÐ×Ö½ÚÂëʱ£¬Êµ¼ÊÉÏ×îÖÕ»¹ÊǰÑ×Ö½ÚÂë½âÊͳɾßÌåÆ½Ì¨ÉϵĻúÆ÷Ö¸ÁîÖ´ÐС£

JavaÓïÑÔµÄÒ»¸ö·Ç³£ÖØÒªµÄÌØµã¾ÍÊÇÓëÆ½Ì¨µÄÎÞ¹ØÐÔ¡£¶øÊ¹ÓÃJavaÐéÄâ»úÊÇʵÏÖÕâÒ»ÌØµãµÄ¹Ø¼ü¡£Ò»°ãµÄ¸ß¼¶ÓïÑÔÈç¹ûÒªÔÚ²»Í¬µÄƽ̨ÉÏÔËÐУ¬ÖÁÉÙÐèÒª±àÒë³É²»Í¬µÄÄ¿±ê´úÂë¡£¶øÒýÈëJavaÓïÑÔÐéÄâ»úºó£¬JavaÓïÑÔÔÚ²»Í¬Æ½Ì¨ÉÏÔËÐÐʱ²»ÐèÒªÖØÐ±àÒë¡£JavaÓïÑÔʹÓÃJavaÐéÄâ»úÆÁ±ÎÁËÓë¾ßÌåÆ½Ì¨Ïà¹ØµÄÐÅÏ¢£¬Ê¹µÃJavaÓïÑÔ±àÒë³ÌÐòÖ»ÐèÉú³ÉÔÚJavaÐéÄâ»úÉÏÔËÐеÄÄ¿±ê´úÂ루×Ö½ÚÂ룩£¬¾Í¿ÉÒÔÔÚ¶àÖÖÆ½Ì¨Éϲ»¼ÓÐ޸ĵØÔËÐС£JavaÐéÄâ»úÔÚÖ´ÐÐ×Ö½ÚÂëʱ£¬°Ñ×Ö½ÚÂë½âÊͳɾßÌåÆ½Ì¨ÉϵĻúÆ÷Ö¸ÁîÖ´ÐС£Õâ¾ÍÊÇJavaµÄÄܹ»¡°Ò»´Î±àÒ룬µ½´¦ÔËÐС±µÄÔ­Òò¡£

2. JRE/JDK/JVMÊÇʲô¹ØÏµ£¿

JRE(JavaRuntimeEnvironment£¬JavaÔËÐл·¾³)£¬Ò²¾ÍÊÇJavaƽ̨¡£ËùÓеÄJava ³ÌÐò¶¼ÒªÔÚJREϲÅÄÜÔËÐС£ÆÕͨÓû§Ö»ÐèÒªÔËÐÐÒÑ¿ª·¢ºÃµÄjava³ÌÐò£¬°²×°JRE¼´¿É¡£

JDK(Java Development Kit)ÊdzÌÐò¿ª·¢ÕßÓÃÀ´À´±àÒë¡¢µ÷ÊÔjava³ÌÐòÓõĿª·¢¹¤¾ß°ü¡£JDKµÄ¹¤¾ßÒ²ÊÇJava³ÌÐò£¬Ò²ÐèÒªJRE²ÅÄÜÔËÐС£ÎªÁ˱£³ÖJDKµÄ¶ÀÁ¢ÐÔºÍÍêÕûÐÔ£¬ÔÚJDKµÄ°²×°¹ý³ÌÖУ¬JREÒ²ÊÇ °²×°µÄÒ»²¿·Ö¡£ËùÒÔ£¬ÔÚJDKµÄ°²×°Ä¿Â¼ÏÂÓÐÒ»¸öÃûΪjreµÄĿ¼£¬ÓÃÓÚ´æ·ÅJREÎļþ¡£

JVM(JavaVirtualMachine£¬JavaÐéÄâ»ú)ÊÇJREµÄÒ»²¿·Ö¡£ËüÊÇÒ»¸öÐé¹¹³öÀ´µÄ¼ÆËã»ú£¬ÊÇͨ¹ýÔÚʵ¼ÊµÄ¼ÆËã»úÉÏ·ÂտģÄâ¸÷ÖÖ¼ÆËã»ú¹¦ÄÜÀ´ÊµÏֵġ£JVMÓÐ×Ô¼ºÍêÉÆµÄÓ²¼þ¼Ü¹¹£¬Èç´¦ÀíÆ÷¡¢¶ÑÕ»¡¢¼Ä´æÆ÷µÈ£¬»¹¾ßÓÐÏàÓ¦µÄÖ¸Áîϵͳ¡£JavaÓïÑÔ×îÖØÒªµÄÌØµã¾ÍÊÇ¿çÆ½Ì¨ÔËÐС£Ê¹ÓÃJVM¾ÍÊÇΪÁËÖ§³ÖÓë²Ù×÷ϵͳÎ޹أ¬ÊµÏÖ¿çÆ½Ì¨¡£

3. JVMÔ­Àí

JVMÊÇjavaµÄºËÐĺͻù´¡£¬ÔÚjava±àÒëÆ÷ºÍosƽ̨֮¼äµÄÐéÄâ´¦ÀíÆ÷¡£ËüÊÇÒ»ÖÖÀûÓÃÈí¼þ·½·¨ÊµÏֵijéÏóµÄ¼ÆËã»ú»ùÓÚϲãµÄ²Ù×÷ϵͳºÍÓ²¼þƽ̨£¬¿ÉÒÔÔÚÉÏÃæÖ´ÐÐjavaµÄ×Ö½ÚÂë³ÌÐò¡£

java±àÒëÆ÷Ö»ÒªÃæÏòJVM£¬Éú³ÉJVMÄÜÀí½âµÄ´úÂë»ò×Ö½ÚÂëÎļþ¡£JavaÔ´Îļþ¾­±àÒë³É×Ö½ÚÂë³ÌÐò£¬Í¨¹ýJVM½«Ã¿Ò»ÌõÖ¸Áî·­Òë³É²»Í¬Æ½Ì¨»úÆ÷Â룬ͨ¹ýÌØ¶¨Æ½Ì¨ÔËÐС£

4. JVMÖ´ÐгÌÐòµÄ¹ý³Ì

1) ¼ÓÔØ.classÎļþ 2) ¹ÜÀí²¢·ÖÅäÄÚ´æ 3) Ö´ÐÐÀ¬»øÊÕ¼¯

JRE£¨javaÔËÐÐʱ»·¾³£©ÓÉJVM¹¹ÔìµÄjava³ÌÐòµÄÔËÐл·£¬Ò²ÊÇJava³ÌÐòÔËÐеĻ·¾³£¬µ«ÊÇËûͬʱһ¸ö²Ù×÷ϵͳµÄÒ»¸öÓ¦ÓóÌÐòÒ»¸ö½ø³Ì£¬Òò´ËËûÒ²ÓÐËû×Ô¼ºµÄÔËÐеÄÉúÃüÖÜÆÚ£¬Ò²ÓÐ×Ô¼ºµÄ´úÂëºÍÊý¾Ý¿Õ¼ä¡£JVMÔÚÕû¸öjdkÖд¦ÓÚ×îµ×²ã£¬¸ºÔðÓÚ²Ù×÷ϵͳµÄ½»»¥£¬ÓÃÀ´ÆÁ±Î²Ù×÷ϵͳ»·¾³£¬Ìṩһ¸öÍêÕûµÄJavaÔËÐл·¾³£¬Òò´ËÒ²¾ÍÐéÄâ¼ÆËã»ú¡£²Ù×÷ϵͳװÈëJVMÊÇͨ¹ýjdkÖÐJava.exeÀ´Íê³É£¬Í¨¹ýÏÂÃæ4²½À´Íê³ÉJVM»·¾³£º1) ´´½¨JVM×°ÔØ»·¾³ºÍÅäÖà 2) ×°ÔØJVM.dll 3) ³õʼ»¯JVM.dll²¢¹Ò½çµ½JNIENV(JNIµ÷ÓýӿÚ)ʵÀý4) µ÷ÓÃJNIEnvʵÀý×°ÔØ²¢´¦ÀíclassÀà¡£

5. JVMµÄÉúÃüÖÜÆÚ

1) JVMʵÀý¶ÔÓ¦ÁËÒ»¸ö¶ÀÁ¢ÔËÐеÄjava³ÌÐòËüÊǽø³Ì¼¶±ð

a) Æô¶¯¡£Æô¶¯Ò»¸öJava³ÌÐòʱ£¬Ò»¸öJVMʵÀý¾Í²úÉúÁË£¬ÈκÎÒ»¸öÓµÓÐpublic static void

main(String[] args)º¯ÊýµÄclass¶¼¿ÉÒÔ×÷ΪJVMʵÀýÔËÐÐµÄÆðµã

b) ÔËÐС£main()×÷Ϊ¸Ã³ÌÐò³õʼÏß³ÌµÄÆðµã£¬ÈÎºÎÆäËûÏ߳̾ùÓɸÃÏß³ÌÆô¶¯¡£JVMÄÚ²¿ÓÐÁ½ÖÖỊ̈߳ºÊØ»¤Ï̺߳ͷÇÊØ»¤Ị̈߳¬main()ÊôÓÚ·ÇÊØ»¤Ị̈߳¬ÊØ»¤Ïß³Ìͨ³£ÓÉJVM×Ô¼ºÊ¹Óã¬java³ÌÐòÒ²¿ÉÒÔ±íÃ÷×Ô¼º´´½¨µÄÏß³ÌÊÇÊØ»¤Ïß³Ì

c) ÏûÍö¡£µ±³ÌÐòÖеÄËùÓзÇÊØ»¤Ï̶߳¼ÖÕֹʱ£¬JVM²ÅÍ˳ö£»Èô°²È«¹ÜÀíÆ÷ÔÊÐí£¬³ÌÐòÒ²¿ÉÒÔʹÓÃRuntimeÀà»òÕßSystem.exit()À´Í˳ö

2) JVMÖ´ÐÐÒýÇæÊµÀýÔò¶ÔÓ¦ÁËÊôÓÚÓû§ÔËÐгÌÐòµÄÏß³ÌËüÊÇÏ̼߳¶±ðµÄ

6. JVMµÄÌåϵ½á¹¹

Àà×°ÔØÆ÷£¨ClassLoader£©£¨ÓÃÀ´×°ÔØ.classÎļþ£©

Ö´ÐÐÒýÇæ£¨Ö´ÐÐ×Ö½ÚÂ룬»òÕßÖ´Ðб¾µØ·½·¨£©

ÔËÐÐʱÊý¾ÝÇø£¨·½·¨Çø¡¢¶Ñ¡¢javaÕ»¡¢PC¼Ä´æÆ÷¡¢±¾µØ·½·¨Õ»£©

7. JVMÔËÐÐʱÊý¾ÝÇø

µÚÒ»¿é£ºPC¼Ä´æÆ÷

PC¼Ä´æÆ÷ÊÇÓÃÓڴ洢ÿ¸öÏß³ÌÏÂÒ»²½½«Ö´ÐеÄJVMÖ¸ÁÈç¸Ã·½·¨ÎªnativeµÄ£¬ÔòPC¼Ä´æÆ÷Öв»´æ´¢ÈκÎÐÅÏ¢¡£

µÚ¶þ¿é£ºJVMÕ»

JVMÕ»ÊÇÏß³Ì˽Óеģ¬Ã¿¸öÏ̴߳´½¨µÄͬʱ¶¼»á´´½¨JVMÕ»£¬JVMÕ»Öдæ·ÅµÄΪµ±Ç°Ïß³ÌÖоֲ¿»ù±¾ÀàÐ͵ıäÁ¿£¨javaÖж¨ÒåµÄ°ËÖÖ»ù±¾ÀàÐÍ£ºboolean¡¢char¡¢byte¡¢short¡¢int¡¢long¡¢float¡¢double£©¡¢²¿·ÖµÄ·µ»Ø½á¹ûÒÔ¼°Stack Frame£¬·Ç»ù±¾ÀàÐ͵ĶÔÏóÔÚJVMÕ»ÉϽö´æ·ÅÒ»¸öÖ¸Ïò¶ÑÉϵĵØÖ·¡£

µÚÈý¿é£º¶Ñ£¨Heap£©

ËüÊÇJVMÓÃÀ´´æ´¢¶ÔÏóʵÀýÒÔ¼°Êý×éÖµµÄÇøÓò£¬¿ÉÒÔÈÏΪJavaÖÐËùÓÐͨ¹ýnew´´½¨µÄ¶ÔÏóµÄÄÚ´æ¶¼ÔÚ´Ë·ÖÅ䣬HeapÖеĶÔÏóµÄÄÚ´æÐèÒªµÈ´ýGC½øÐлØÊÕ¡£

£¨1£© ¶ÑÊÇJVMÖÐËùÓÐÏ̹߳²ÏíµÄ£¬Òò´ËÔÚÆäÉϽøÐжÔÏóÄÚ´æµÄ·ÖÅä¾ùÐèÒª½øÐмÓËø£¬ÕâÒ²µ¼ÖÂÁËnew¶ÔÏóµÄ¿ªÏúÊDZȽϴóµÄ

£¨2£© Sun Hotspot JVMΪÁËÌáÉý¶ÔÏóÄÚ´æ·ÖÅäµÄЧÂÊ£¬¶ÔÓÚËù´´½¨µÄÏ̶߳¼»á·ÖÅäÒ»¿é¶ÀÁ¢µÄ¿Õ¼äTLAB£¨Thread Local Allocation Buffer£©£¬Æä´óСÓÉJVM¸ù¾ÝÔËÐеÄÇé¿ö¼ÆËã¶øµÃ£¬ÔÚTLABÉÏ·ÖÅä¶ÔÏóʱ²»ÐèÒª¼ÓËø£¬Òò´ËJVMÔÚ¸øÏ̵߳ĶÔÏó·ÖÅäÄÚ´æÊ±»á¾¡Á¿µÄÔÚTLABÉÏ·ÖÅ䣬ÔÚÕâÖÖÇé¿öÏÂJVMÖзÖÅä¶ÔÏóÄÚ´æµÄÐÔÄܺÍC»ù±¾ÊÇÒ»Ñù¸ßЧµÄ£¬µ«Èç¹û¶ÔÏó¹ý´óµÄ»°ÔòÈÔÈ»ÊÇÖ±½ÓʹÓöѿռä·ÖÅä

£¨3£© TLAB½ö×÷ÓÃÓÚÐÂÉú´úµÄEden Space£¬Òò´ËÔÚ±àдJava³ÌÐòʱ£¬Í¨³£¶à¸öСµÄ¶ÔÏó±È´óµÄ¶ÔÏó·ÖÅäÆðÀ´¸ü¼Ó¸ßЧ¡£

£¨4£© ËùÓÐд´½¨µÄObject ¶¼½«»á´æ´¢ÔÚÐÂÉú´úYong GenerationÖС£Èç¹ûYoung GenerationµÄÊý¾ÝÔÚÒ»´Î»ò¶à´ÎGCºó´æ»îÏÂÀ´£¬ÄÇô½«±»×ªÒƵ½OldGeneration¡£ÐµÄObject×ÜÊÇ´´½¨ÔÚEden Space¡£

µÚËĿ飺·½·¨ÇøÓò£¨Method Area£©

£¨1£©ÔÚSun JDKÖÐÕâ¿éÇøÓò¶ÔÓ¦µÄΪPermanetGeneration£¬ÓÖ³ÆÎª³Ö¾Ã´ú¡£

£¨2£©·½·¨ÇøÓò´æ·ÅÁËËù¼ÓÔØµÄÀàµÄÐÅÏ¢£¨Ãû³Æ¡¢ÐÞÊηûµÈ£©¡¢ÀàÖеľ²Ì¬±äÁ¿¡¢ÀàÖж¨ÒåΪfinalÀàÐ͵ij£Á¿¡¢ÀàÖеÄFieldÐÅÏ¢¡¢ÀàÖеķ½·¨ÐÅÏ¢£¬µ±¿ª·¢ÈËÔ±ÔÚ³ÌÐòÖÐͨ¹ýClass¶ÔÏóÖеÄgetName¡¢isInterfaceµÈ·½·¨À´»ñÈ¡ÐÅϢʱ£¬ÕâЩÊý¾Ý¶¼À´Ô´ÓÚ·½·¨ÇøÓò£¬Í¬Ê±·½·¨ÇøÓòÒ²ÊÇÈ«¾Ö¹²ÏíµÄ£¬ÔÚÒ»¶¨µÄÌõ¼þÏÂËüÒ²»á±»GC£¬µ±·½·¨ÇøÓòÐèҪʹÓõÄÄڴ泬¹ýÆäÔÊÐíµÄ´óСʱ£¬»áÅ׳öOutOfMemoryµÄ´íÎóÐÅÏ¢¡£

µÚÎå¿é£ºÔËÐÐʱ³£Á¿³Ø£¨Runtime Constant Pool£©

´æ·ÅµÄΪÀàÖеĹ̶¨µÄ³£Á¿ÐÅÏ¢¡¢·½·¨ºÍFieldµÄÒýÓÃÐÅÏ¢µÈ£¬Æä¿Õ¼ä´Ó·½·¨ÇøÓòÖзÖÅä¡£

µÚÁù¿é£º±¾µØ·½·¨¶ÑÕ»£¨Native Method Stacks£©

JVM²ÉÓñ¾µØ·½·¨¶ÑÕ»À´Ö§³Önative·½·¨µÄÖ´ÐУ¬´ËÇøÓòÓÃÓڴ洢ÿ¸önative·½·¨µ÷ÓõÄ״̬¡£

8. JVMÀ¬»ø»ØÊÕ

GC (Garbage Collection)µÄ»ù±¾Ô­Àí£º½«ÄÚ´æÖв»ÔÙ±»Ê¹ÓõĶÔÏó½øÐлØÊÕ£¬GCÖÐÓÃÓÚ»ØÊյķ½·¨³ÆÎªÊÕ¼¯Æ÷£¬ÓÉÓÚGCÐèÒªÏûºÄһЩ×ÊÔ´ºÍʱ¼ä£¬JavaÔÚ¶Ô¶ÔÏóµÄÉúÃüÖÜÆÚÌØÕ÷½øÐзÖÎöºó£¬°´ÕÕÐÂÉú´ú¡¢¾ÉÉú´úµÄ·½Ê½À´¶Ô¶ÔÏó½øÐÐÊÕ¼¯£¬ÒÔ¾¡¿ÉÄܵÄËõ¶ÌGC¶ÔÓ¦ÓÃÔì³ÉµÄÔÝÍ£

£¨1£©¶ÔÐÂÉú´úµÄ¶ÔÏóµÄÊÕ¼¯³ÆÎªminor GC£»

£¨2£©¶Ô¾ÉÉú´úµÄ¶ÔÏóµÄÊÕ¼¯³ÆÎªFull GC£»

£¨3£©³ÌÐòÖÐÖ÷¶¯µ÷ÓÃSystem.gc()Ç¿ÖÆÖ´ÐеÄGCΪFull GC¡£

²»Í¬µÄ¶ÔÏóÒýÓÃÀàÐÍ£¬ GC»á²ÉÓò»Í¬µÄ·½·¨½øÐлØÊÕ£¬JVM¶ÔÏóµÄÒýÓ÷ÖΪÁËËÄÖÖÀàÐÍ£º

£¨1£©Ç¿ÒýÓãºÄ¬ÈÏÇé¿öÏ£¬¶ÔÏó²ÉÓõľùΪǿÒýÓã¨Õâ¸ö¶ÔÏóµÄʵÀýûÓÐÆäËû¶ÔÏóÒýÓã¬GCʱ²Å»á±»»ØÊÕ£©

£¨2£©ÈíÒýÓãºÈíÒýÓÃÊÇJavaÖÐÌṩµÄÒ»ÖֱȽÏÊʺÏÓÚ»º´æ³¡¾°µÄÓ¦Óã¨Ö»ÓÐÔÚÄÚ´æ²»¹»ÓõÄÇé¿öϲŻᱻGC£©

£¨3£©ÈõÒýÓãºÔÚGCʱһ¶¨»á±»GC»ØÊÕ

£¨4£©ÐéÒýÓãºÓÉÓÚÐéÒýÓÃÖ»ÊÇÓÃÀ´µÃÖª¶ÔÏóÊÇ·ñ±»GC

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

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

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

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