±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ
csdn£¬Ïêϸ½²½âÁËjavaÐéÄâ»úµÄÉúÃüÖÜÆÚ£¬Ìåϵ½á¹¹£¬Àà¼ÓÔØÆ÷¡¢·½·¨Çø¼°¶Ñ£¬Æä´Î·çζ¼¸¸ö²¿·Ö½²½âÁË»ù±¾½á¹¹£¬Ï£Íû¶Ô´ó¼ÒÓаïÖú¡£ |
|
Ò»¡¢javaÐéÄâ»úµÄÉúÃüÖÜÆÚ£º
¡¡¡¡JavaÐéÄâ»úµÄÉúÃüÖÜÆÚ Ò»¸öÔËÐÐÖеÄJavaÐéÄâ»úÓÐ×ÅÒ»¸öÇåÎúµÄÈÎÎñ£ºÖ´ÐÐJava³ÌÐò¡£³ÌÐò¿ªÊ¼Ö´ÐÐʱËû²ÅÔËÐУ¬³ÌÐò½áÊøÊ±Ëû¾ÍÍ£Ö¹¡£ÄãÔÚͬһ̨»úÆ÷ÉÏÔËÐÐÈý¸ö³ÌÐò£¬¾Í»áÓÐÈý¸öÔËÐÐÖеÄJavaÐéÄâ»ú¡£
JavaÐéÄâ»ú×ÜÊÇ¿ªÊ¼ÓÚÒ»¸ömain()·½·¨£¬Õâ¸ö·½·¨±ØÐëÊǹ«ÓС¢·µ»Øvoid¡¢Ö±½ÓÊÜÒ»¸ö×Ö·û´®Êý×é¡£ÔÚ³ÌÐòÖ´ÐÐʱ£¬Äã±ØÐë¸øJavaÐéÄâ»úÖ¸Ã÷Õâ¸ö°ü»»main()·½·¨µÄÀàÃû¡£
Main()·½·¨ÊdzÌÐòµÄÆðµã£¬Ëû±»Ö´ÐеÄÏ̳߳õʼ»¯Îª³ÌÐòµÄ³õʼÏ̡߳£³ÌÐòÖÐÆäËûµÄÏ̶߳¼ÓÉËûÀ´Æô¶¯¡£JavaÖеÄÏ̷߳ÖΪÁ½ÖÖ£ºÊØ»¤Ïß³Ì
£¨daemon£©ºÍÆÕͨỊ̈߳¨non-daemon£©¡£ÊØ»¤Ïß³ÌÊÇJavaÐéÄâ»ú×Ô¼ºÊ¹ÓõÄỊ̈߳¬±ÈÈ縺ÔðÀ¬»øÊÕ¼¯µÄÏ߳̾ÍÊÇÒ»¸öÊØ»¤Ï̡߳£µ±È»£¬ÄãÒ²¿É
ÒÔ°Ñ×Ô¼ºµÄ³ÌÐòÉèÖÃÎªÊØ»¤Ï̡߳£°üº¬Main()·½·¨µÄ³õʼÏ̲߳»ÊÇÊØ»¤Ï̡߳£ Ö»ÒªJavaÐéÄâ»úÖл¹ÓÐÆÕͨµÄÏß³ÌÔÚÖ´ÐУ¬JavaÐéÄâ»ú¾Í²»»áÍ£Ö¹¡£Èç¹ûÓÐ×ã¹»µÄȨÏÞ£¬Äã¿ÉÒÔµ÷ÓÃexit()·½·¨ÖÕÖ¹³ÌÐò¡£
¶þ¡¢javaÐéÄâ»úµÄÌåϵ½á¹¹£º
ÔÚJavaÐéÄâ»úµÄ¹æ·¶Öж¨ÒåÁËһϵÁеÄ×Óϵͳ¡¢ÄÚ´æÇøÓò¡¢Êý¾ÝÀàÐͺÍʹÓÃÖ¸ÄÏ¡£ÕâЩ×é¼þ¹¹³ÉÁËJavaÐéÄâ»úµÄÄÚ²¿½á¹¹£¬ËûÃDz»½ö½öΪJavaÐéÄâ»úµÄʵÏÖÌṩÁËÇåÎúµÄÄÚ²¿½á¹¹£¬¸üÊÇÑϸñ¹æ¶¨ÁËJavaÐéÄâ»úʵÏÖµÄÍⲿÐÐΪ¡£
ÿһ¸öJavaÐéÄâ»ú¶¼ÓÉÒ»¸öÀà¼ÓÔØÆ÷×Óϵͳ£¨class loader subsystem£©£¬¸ºÔð¼ÓÔØ³ÌÐòÖеÄÀàÐÍ£¨ÀàºÍ½Ó¿Ú£©£¬²¢¸³ÓèΨһµÄÃû×Ö¡£Ã¿Ò»¸öJavaÐéÄâ»ú¶¼ÓÐÒ»¸öÖ´ÐÐÒýÇæ£¨execution
engine£©¸ºÔðÖ´Ðб»¼ÓÔØÀàÖаüº¬µÄÖ¸Áî¡£
³ÌÐòµÄÖ´ÐÐÐèÒªÒ»¶¨µÄÄÚ´æ¿Õ¼ä£¬Èç×Ö½ÚÂë¡¢±»¼ÓÔØÀàµÄÆäËû¶îÍâÐÅÏ¢¡¢³ÌÐòÖеĶÔÏó¡¢·½·¨µÄ²ÎÊý¡¢·µ»ØÖµ¡¢±¾µØ±äÁ¿¡¢´¦ÀíµÄÖмä±äÁ¿µÈµÈ¡£JavaÐéÄâ»ú½«
ÕâЩÐÅϢͳͳ±£´æÔÚÊý¾ÝÇø£¨data areas£©ÖС£ËäȻÿ¸öJavaÐéÄâ»úµÄʵÏÖÖж¼°üº¬Êý¾ÝÇø£¬µ«ÊÇJavaÐéÄâ»ú¹æ·¶¶ÔÊý¾ÝÇøµÄ¹æ¶¨È´·Ç³£µÄ³éÏó¡£Ðí¶à½á¹¹ÉϵÄϸ½Ú²¿·Ö¶¼Áô¸øÁË
JavaÐéÄâ»úʵÏÖÕß×Ô¼º·¢»Ó¡£²»Í¬JavaÐéÄâ»úʵÏÖÉϵÄÄÚ´æ½á¹¹Ç§²îÍò±ð¡£Ò»²¿·ÖʵÏÖ¿ÉÄÜÕ¼ÓúܶàÄڴ棬¶øÆäËûÒÔÏ¿ÉÄÜÖ»Õ¼ÓúÜÉÙµÄÄڴ棻һЩʵÏÖ¿É
ÄÜ»áʹÓÃÐéÄâÄڴ棬¶øÆäËûµÄÔò²»Ê¹Óá£ÕâÖֱȽϾ«Á¶µÄJavaÐéÄâ»úÄÚ´æ¹æÔ¼£¬¿ÉÒÔʹµÃJavaÐéÄâ»ú¿ÉÒÔÔڹ㷺µÄƽ̨Éϱ»ÊµÏÖ¡£
Êý¾ÝÇøÖеÄÒ»²¿·ÖÊÇÕû¸ö³ÌÐò¹²ÓУ¬ÆäËû²¿·Ö±»µ¥¶ÀµÄÏ߳̿ØÖÆ¡£Ã¿Ò»¸öJavaÐéÄâ»ú¶¼°üº¬·½·¨Çø£¨method
area£©ºÍ¶Ñ£¨heap£©£¬ËûÃǶ¼±»Õû¸ö³ÌÐò¹²Ïí¡£JavaÐéÄâ»ú¼ÓÔØ²¢½âÎöÒ»¸öÀàÒԺ󣬽«´ÓÀàÎļþÖнâÎö³öÀ´µÄÐÅÏ¢±£´æÓë·½·¨ÇøÖС£³ÌÐòÖ´ÐÐʱ´´½¨µÄ
¶ÔÏó¶¼±£´æÔÚ¶ÑÖС£
µ±Ò»¸öÏ̱߳»´´½¨Ê±£¬»á±»·ÖÅäÖ»ÊôÓÚËû×Ô¼ºµÄPC¼Ä´æÆ÷¡°pc register¡±£¨³ÌÐò¼ÆÊýÆ÷£©ºÍJava¶ÑÕ»£¨Java
stack£©¡£µ±Ï̲߳»µôÓñ¾µØ·½·¨Ê±£¬PC¼Ä´æÆ÷Öб£´æÏß³ÌÖ´ÐеÄÏÂÒ»ÌõÖ¸Áî¡£Java¶ÑÕ»±£´æÁËÒ»¸öÏ̵߳÷Ó÷½·¨Ê±µÄ״̬£¬°üÀ¨±¾µØ±äÁ¿¡¢µ÷Ó÷½·¨µÄ
²ÎÊý¡¢·µ»ØÖµ¡¢´¦ÀíµÄÖмä±äÁ¿¡£µ÷Óñ¾µØ·½·¨Ê±µÄ״̬±£´æÔÚ±¾µØ·½·¨¶ÑÕ»ÖУ¨native method
stacks£©£¬¿ÉÄÜÔټĴæÆ÷»òÕ߯äËû·Çƽ̨¶ÀÁ¢µÄÄÚ´æÖС£
Java¶ÑÕ»ÓжÑÕ»¿é£¨stack frames (or frames)£©×é³É¡£¶ÑÕ»¿é°üº¬Java·½·¨µ÷ÓõÄ״̬¡£µ±Ò»¸öÏ̵߳÷ÓÃÒ»¸ö·½·¨Ê±£¬JavaÐéÄâ»ú»á½«Ò»¸öеĿéѹµ½Java¶ÑÕ»ÖУ¬µ±Õâ¸ö·½·¨ÔËÐнáÊøÊ±£¬JavaÐéÄâ»ú»á½«¶ÔÓ¦µÄ¿éµ¯³ö²¢Åׯú¡£
JavaÐéÄâ»ú²»Ê¹ÓüĴæÆ÷±£´æ¼ÆËãµÄÖмä½á¹û£¬¶øÊÇÓÃJava¶ÑÕ»ÔÚ´æ·ÅÖмä½á¹û¡£ÕâÊǵÄJavaÐéÄâ»úµÄÖ¸Áî¸ü½ô´Õ£¬Ò²¸üÈÝÒ×ÔÚÒ»¸öûÓмĴæÆ÷µÄÉ豸ÉÏʵÏÖJavaÐéÄâ»ú¡£
ͼÖеÄJava¶ÑÕ»ÖÐÏòÏÂÔö³¤µÄ£¬PC¼Ä´æÆ÷ÖÐÏß³ÌÈýΪ»ÒÉ«£¬ÊÇÒòΪËüÕýÔÚÖ´Ðб¾µØ·½·¨£¬ËûµÄÏÂÒ»ÌõÖ´ÐÐÖ¸Áî²»±£´æÔÚPC¼Ä´æÆ÷ÖС£
Èý¡¢Àà¼ÓÔØÆ÷×Óϵͳ£º
JavaÐéÄâ»úÖеÄÀà¼ÓÔØÆ÷·ÖΪÁ½ÖÖ£ºÔʼÀà¼ÓÔØÆ÷£¨primordial class loader£©ºÍÀà¼ÓÔØÆ÷¶ÔÏó£¨class
loader objects£©¡£ÔʼÀà¼ÓÔØÆ÷ÊÇJavaÐéÄâ»úʵÏÖµÄÒ»²¿·Ö£¬Àà¼ÓÔØÆ÷¶ÔÏóÊÇÔËÐÐÖеijÌÐòµÄÒ»²¿·Ö¡£²»Í¬Àà¼ÓÔØÆ÷¼ÓÔØµÄÀà±»²»Í¬µÄÃüÃû¿Õ¼äËù·Ö¸î¡£
Àà¼ÓÔØÆ÷µ÷ÓÃÁËÐí¶àJavaÐéÄâ»úÖÐÆäËûµÄ²¿·ÖºÍjava.lang°üÖеĺܶàÀà¡£±ÈÈ磬Àà¼ÓÔØ¶ÔÏó¾ÍÊÇjava.lang.ClassLoader×ÓÀà
µÄʵÀý£¬ClassLoaderÀàÖеķ½·¨¿ÉÒÔ·ÃÎÊÐéÄâ»úÖеÄÀà¼ÓÔØ»úÖÆ£»Ã¿Ò»¸ö±»JavaÐéÄâ»ú¼ÓÔØµÄÀà¶¼»á±»±íʾΪһ¸ö
java.lang.ClassÀàµÄʵÀý¡£ÏñÆäËû¶ÔÏóÒ»Ñù£¬Àà¼ÓÔØÆ÷¶ÔÏóºÍClass¶ÔÏó¶¼±£´æÔÚ¶ÑÖУ¬±»¼ÓÔØµÄÐÅÏ¢±»±£´æÔÚ·½·¨ÇøÖС£
1¡¢¼ÓÔØ¡¢Á¬½Ó¡¢³õʼ»¯£¨Loading, Linking and Initialization£©
Àà¼ÓÔØ×Óϵͳ²»½ö½ö¸ºÔð¶¨Î»²¢¼ÓÔØÀàÎļþ£¬Ëû°´ÕÕÒÔÏÂÑϸñµÄ²½Öè×÷Á˺ܶàÆäËûµÄÊÂÇ飺£¨¾ßÌåµÄÐÅÏ¢²Î¼ûµÚÆßÕµġ°ÀàµÄÉúÃüÖÜÆÚ¡±£©
1£©¡¢¼ÓÔØ£ºÑ°ÕÒ²¢µ¼ÈëÖ¸¶¨ÀàÐÍ£¨ÀàºÍ½Ó¿Ú£©µÄ¶þ½øÖÆÐÅÏ¢
2£©¡¢Á¬½Ó£º½øÐÐÑéÖ¤¡¢×¼±¸ºÍ½âÎö
¢ÙÑéÖ¤£ºÈ·±£µ¼ÈëÀàÐ͵ÄÕýÈ·ÐÔ
¢Ú×¼±¸£ºÎªÀàÐÍ·ÖÅäÄÚ´æ²¢³õʼ»¯ÎªÄ¬ÈÏÖµ
¢Û½âÎö£º½«×Ö·ûÒýÓýâÎöΪֱ½ÓÒûÓÃ
3£©¡¢³õʼ»¯£ºµ÷ÓÃJava´úÂ룬³õʼ»¯Àà±äÁ¿ÎªºÏÊʵÄÖµ
2¡¢ÔʼÀà¼ÓÔØÆ÷£¨The Primordial Class Loader£©
ÿ¸öJavaÐéÄâ»ú¶¼±ØÐëʵÏÖÒ»¸öÔʼÀà¼ÓÔØÆ÷£¬ËûÄܹ»¼ÓÔØÄÇЩ×ñÊØÀàÎļþ¸ñʽ²¢ÇÒ±»ÐÅÈεÄÀà¡£µ«ÊÇ£¬JavaÐéÄâ»úµÄ¹æ·¶²¢Ã»Óж¨ÒåÈçºÎ¼ÓÔØÀ࣬ÕâÓÉ
JavaÐéÄâ»úʵÏÖÕß×Ô¼º¾ö¶¨¡£¶ÔÓÚ¸ø¶¨ÀàÐÍÃûµÄÀàÐÍ£¬ÔʼÀ³¼ÓÔØÆ÷±ØÐëÕÒµ½ÄǸöÀàÐÍÃû¼Ó¡°.class¡±µÄÎļþ²¢¼ÓÔØÈëÐéÄâ»úÖС£
3¡¢Àà¼ÓÔØÆ÷¶ÔÏó
ËäÈ»Àà¼ÓÔØÆ÷¶ÔÏóÊÇJava³ÌÐòµÄÒ»²¿·Ö£¬µ«ÊÇClassLoaderÀàÖеÄÈý¸ö·½·¨¿ÉÒÔ·ÃÎÊJavaÐéÄâ»úÖеÄÀà¼ÓÔØ×Óϵͳ¡£
1£©¡¢protected final Class defineClass(¡)£ºÊ¹ÓÃÕâ¸ö·½·¨¿ÉÒÔ³öÈëÒ»¸ö×Ö½ÚÊý×飬¶¨ÒåÒ»¸öеÄÀàÐÍ¡£
2£©¡¢protected Class findSystemClass(String name)£º¼ÓÔØÖ¸¶¨µÄÀ࣬Èç¹ûÒѾ¼ÓÔØ£¬¾ÍÖ±½Ó·µ»Ø¡£
3£©¡¢protected final void resolveClass(Class c)£ºdefineClass()·½·¨Ö»ÊǼÓÔØÒ»¸öÀ࣬Õâ¸ö·½·¨¸ºÔðºóÐøµÄ¶¯Ì¬Á¬½ÓºÍ³õʼ»¯¡£
¾ßÌåµÄÐÅÏ¢£¬²Î¼ûµÚ°ËÕ¡°Á¬½ÓÄ£ÐÍ¡±£¨ The Linking Model£©¡£
4¡¢ÃüÃû¿Õ¼ä
µ±¶à¸öÀà¼ÓÔØÆ÷¼ÓÔØÁËͬһ¸öÀàʱ£¬ÎªÁ˱£Ö¤ËûÃÇÃû×ÖµÄΨһÐÔ£¬ÐèÒªÔÚÀàÃûǰ¼ÓÉϼÓÔØ¸ÃÀàµÄÀà¼ÓÔØÆ÷µÄ±êʶ¡£¾ßÌåµÄÐÅÏ¢£¬²Î¼ûµÚ°ËÕ¡°Á¬½ÓÄ£ÐÍ¡±£¨
The Linking Model£©¡£
ËÄ¡¢·½·¨Çø£º
ÔÚJavaÐéÄâ»úÖУ¬±»¼ÓÔØÀàÐ͵ÄÐÅÏ¢¶¼±£´æÔÚ·½·¨ÇøÖС£ÕâдÐÅÏ¢ÔÚÄÚ´æÖеÄ×éÖ¯ÐÎʽÓÉÐéÄâ»úµÄʵÏÖÕß¶¨Ò壬±ÈÈ磬ÐéÄâ»ú¹¤×÷ÔÚÒ»¸ö¡°little-
endian¡±µÄ´¦ÀíÆ÷ÉÏ£¬Ëû¾Í¿ÉÒÔ½«ÐÅÏ¢±£´æÎª¡°little-endian¡±¸ñʽµÄ£¬ËäÈ»ÔÚJavaÀàÎļþÖÐËûÃÇÊÇÒÔ¡°big-endian¡±¸ñʽ±£
´æµÄ¡£Éè¼ÆÕß¿ÉÒÔÓÃ×îÊʺϲ¢µØ»úÆ÷µÄ±íʾ¸ñʽÀ´´æ´¢Êý¾Ý£¬ÒÔ±£Ö¤³ÌÐòÄܹ»ÒÔ×î¿ìµÄËÙ¶ÈÖ´ÐС£µ«ÊÇ£¬ÔÚÒ»¸öÖ»ÓкÜСÄÚ´æµÄÉ豸ÉÏ£¬ÐéÄâ»úµÄʵÏÖÕ߾Ͳ»»áÕ¼ÓÃ
ºÜ´óµÄÄÚ´æ¡£
³ÌÐòÖеÄËùÓÐÏ̹߳²ÏíÒ»¸ö·½·¨Çø£¬ËùÒÔ·ÃÎÊ·½·¨ÇøÐÅÏ¢µÄ·½·¨±ØÐëÊÇḬ̈߳²È«µÄ¡£Èç¹ûÄãÓÐÁ½¸öÏ̶߳¼È¥¼ÓÔØÒ»¸ö½ÐLavaµÄÀ࣬ÄÇÖ»ÄÜÓÉÒ»¸öÏ̱߳»ÈÝÐíÈ¥¼ÓÔØÕâ¸öÀ࣬ÁíÒ»¸ö±ØÐëµÈ´ý¡£
ÔÚ³ÌÐòÔËÐÐʱ£¬·½·¨ÇøµÄ´óСÊǿɱäµÄ£¬³ÌÐòÔÚÔËÐÐʱ¿ÉÒÔÀ©Õ¹¡£ÓÐЩJavaÐéÄâ»úµÄʵÏÖÒ²¿ÉÒÔͨ¹ý²ÎÊýÒ²¶©ÖÆ·½·¨ÇøµÄ³õʼ´óС£¬×îСֵºÍ×î´óÖµ¡£
·½·¨ÇøÒ²¿ÉÒÔ±»À¬»øÊÕ¼¯¡£ÒòΪ³ÌÐòÖеÄÄÚÓÉÀà¼ÓÔØÆ÷¶¯Ì¬¼ÓÔØ£¬ËùÓÐÀà¿ÉÄܱä³ÉûÓб»ÒýÓã¨unreferenced£©µÄ״̬¡£µ±Àà±ä³ÉÕâÖÖ״̬ʱ£¬Ëû¾Í¿É
Äܱ»À¬»øÊÕ¼¯µô¡£Ã»ÓмÓÔØµÄÀà°üÀ¨Á½ÖÖ״̬£¬Ò»ÖÖÊÇÕæÕýµÄûÓмÓÔØ£¬ÁíÒ»¸öÖÖÊÇ¡°unreferenced¡±µÄ״̬¡£ÏêϸÐÅÏ¢²Î¼ûµÚÆßÕµÄÀàµÄÉúÃüÖÜÆÚ
£¨The Lifetime of a Class£©¡£
1¡¢ÀàÐÍÐÅÏ¢£¨Type Information£©
ÿһ¸ö±»¼ÓÔØµÄÀàÐÍ£¬ÔÚJavaÐéÄâ»úÖж¼»áÔÚ·½·¨ÇøÖб£´æÈçÏÂÐÅÏ¢£º
1£©¡¢ÀàÐ͵ÄÈ«Ãû£¨The fully qualified name of the type£©
2£©¡¢ÀàÐ͵ĸ¸ÀàÐ͵ÄÈ«Ãû£¨³ý·ÇûÓи¸ÀàÐÍ£¬»òÕ߸¥À×ÐÎʽjava.lang.Object£©£¨The fully
qualified name of the type¨ªs direct superclass£©
3£©¡¢¸øÀàÐÍÊÇÒ»¸öÀ໹Êǽӿڣ¨class or an interface£©£¨Whether or not
the type is a class £©
4£©¡¢ÀàÐ͵ÄÐÞÊηû£¨public£¬private£¬protected£¬static£¬final£¬volatile£¬transientµÈ£©£¨The
type¨ªs modifiers£©
5£©¡¢ËùÓи¸½Ó¿ÚÈ«ÃûµÄÁÐ±í£¨An ordered list of the fully qualified
names of any direct superinterfaces£©
ÀàÐÍÈ«Ãû±£´æµÄÊý¾Ý½á¹¹ÓÉÐéÄâ»úʵÏÖÕß¶¨Òå¡£³ý´ËÖ®Í⣬JavaÐéÄâ»ú»¹ÒªÎªÃ¿¸öÀàÐͱ£´æÈçÏÂÐÅÏ¢£º
1£©¡¢ÀàÐ͵ij£Á¿³Ø£¨The constant pool for the type£©
2£©¡¢ÀàÐÍ×ֶεÄÐÅÏ¢£¨Field information£©
3£©¡¢ÀàÐÍ·½·¨µÄÐÅÏ¢£¨Method information£©
4£©¡¢ËùÓеľ²Ì¬Àà±äÁ¿£¨·Ç³£Á¿£©ÐÅÏ¢£¨All class (static) variables declared
in the type, except constants£©
5£©¡¢Ò»¸öÖ¸ÏòÀà¼ÓÔØÆ÷µÄÒýÓã¨A reference to class ClassLoader£©
6£©¡¢Ò»¸öÖ¸ÏòClassÀàµÄÒýÓã¨A reference to class Class£©
1£©¡¢ÀàÐ͵ij£Á¿³Ø£¨The constant pool for the type£©
³£Á¿³ØÖб£´æÖÐËùÓÐÀàÐÍÊÇÓõÄÓÐÐòµÄ³£Á¿¼¯ºÏ£¬°üº¬Ö±½Ó³£Á¿£¨literals£©Èç×Ö·û´®¡¢ÕûÊý¡¢¸¡µãÊýµÄ³£Á¿£¬ºÍ¶ÔÀàÐÍ¡¢×ֶΡ¢·½·¨µÄ·ûºÅÒýÓᣳ£Á¿³Ø
ÖÐÿһ¸ö±£´æµÄ³£Á¿¶¼ÓÐÒ»¸öË÷Òý£¬¾ÍÏñÊý×éÖеÄ×Ö¶ÎÒ»Ñù¡£ÒòΪ³£Á¿³ØÖб£´æÖÐËùÓÐÀàÐÍʹÓõ½µÄÀàÐÍ¡¢×ֶΡ¢·½·¨µÄ×Ö·ûÒýÓã¬ËùÒÔËüÒ²ÊǶ¯Ì¬Á¬½ÓµÄÖ÷Òª¶Ô
Ïó¡£ÏêϸÐÅÏ¢²Î¼ûµÚÁùÕ¡°The Java Class File¡±¡£
2£©¡¢ÀàÐÍ×ֶεÄÐÅÏ¢£¨Field information£©
×Ö¶ÎÃû¡¢×Ö¶ÎÀàÐÍ¡¢×ֶεÄÐÞÊηû£¨public£¬private£¬protected£¬static£¬final£¬volatile£¬transientµÈ£©¡¢×Ö¶ÎÔÚÀàÖж¨ÒåµÄ˳Ðò¡£
3£©¡¢ÀàÐÍ·½·¨µÄÐÅÏ¢£¨Method information£©
·½·¨Ãû¡¢·½·¨µÄ·µ»ØÖµÀàÐÍ£¨»òÕßÊÇvoid£©¡¢·½·¨²ÎÊýµÄ¸öÊý¡¢ÀàÐͺÍËûÃǵÄ˳Ðò¡¢×ֶεÄÐÞÊηû£¨public£¬private£¬protected£¬static£¬final£¬volatile£¬transientµÈ£©¡¢·½·¨ÔÚÀàÖж¨ÒåµÄ˳Ðò
Èç¹û²»ÊdzéÏóºÍ±¾µØ±¾·¨»¹ÐèÒª±£´æ
·½·¨µÄ×Ö½ÚÂë¡¢·½·¨µÄ²Ù×÷Êý¶ÑÕ»µÄ´óСºÍ±¾µØ±äÁ¿ÇøµÄ´óС£¨ÉÔºòÓÐÏêϸÐÅÏ¢£©¡¢Òì³£ÁÐ±í£¨ÏêϸÐÅÏ¢²Î¼ûµÚÊ®ÆßÕ¡°Exceptions¡±¡££©
4£©¡¢Àࣨ¾²Ì¬£©±äÁ¿£¨Class Variables£©
Àà±äÁ¿±»ËùÓÐÀàµÄʵÀý¹²Ïí£¬¼´Ê¹²»Í¨¹ýÀàµÄʵÀýÒ²¿ÉÒÔ·ÃÎÊ¡£ÕâЩ±äÁ¿°ó¶¨ÔÚÀàÉÏ£¨¶ø²»ÊÇÀàµÄʵÀýÉÏ£©£¬ËùÒÔËûÃÇÊÇÀàµÄÂß¼Êý¾ÝµÄÒ»²¿·Ö¡£ÔÚJavaÐéÄâ»úʹÓÃÕâ¸öÀà֮ǰ¾ÍÐèҪΪÀà±äÁ¿£¨non-final£©·ÖÅäÄÚ´æ
³£Á¿£¨final£©µÄ´¦Àí·½Ê½ÓÚÕâÖÖÀà±äÁ¿£¨non-final£©²»Ò»Ñù¡£Ã¿Ò»¸öÀàÐÍÔÚÓõ½Ò»¸ö³£Á¿µÄʱºò£¬¶¼»á¸´ÖÆÒ»·Ýµ½×Ô¼ºµÄ³£Á¿³ØÖС£³£Á¿Ò²ÏñÀà±ä
Á¿Ò»Ñù±£´æÔÚ·½·¨ÇøÖУ¬Ö»²»¹ýËû±£´æÔÚ³£Á¿³ØÖС££¨¿ÉÄÜÊÇ£¬Àà±äÁ¿±»ËùÓÐʵÀý¹²Ïí£¬¶ø³£Á¿³ØÊÇÿ¸öʵÀý¶ÀÓеģ©¡£Non-finalÀà±äÁ¿±£´æÎª¶¨ÒåËûµÄ
ÀàÐÍÊý¾Ý£¨data for the type that declares them£©µÄÒ»²¿·Ö£¬¶øfinal³£Á¿±£´æÎªÊ¹ÓÃËûµÄÀàÐÍÊý¾Ý£¨data
for any type that uses them£©µÄÒ»²¿·Ö¡£ÏêÇé²Î¼ûµÚÁùÕ¡°The Java
Class FileThe Java Class File¡±
5£©¡¢Ö¸ÏòÀà¼ÓÔØÆ÷µÄÒýÓã¨A reference to class ClassLoader£©
ÿһ¸ö±»JavaÐéÄâ»ú¼ÓÔØµÄÀàÐÍ£¬ÐéÄâ»ú±ØÐë±£´æÕâ¸öÀàÐÍÊÇ·ñÓÉÔʼÀà¼ÓÔØÆ÷»òÕßÀà¼ÓÔØÆ÷¼ÓÔØ¡£ÄÇЩ±»Àà¼ÓÔØÆ÷¼ÓÔØµÄÀàÐͱØÐë±£´æÒ»¸öÖ¸ÏòÀà¼ÓÔØÆ÷µÄÒý
Óᣵ±Àà¼ÓÔØÆ÷¶¯Ì¬Á¬½Óʱ£¬»áʹÓÃÕâÌõÐÅÏ¢¡£µ±Ò»¸öÀàÒýÓÃÁíÒ»¸öÀàʱ£¬ÐéÄâ»ú±ØÐë±£´æÄǸö±»ÒýÓõÄÀàÐÍÊDZ»Í¬Ò»¸öÀà¼ÓÔØÆ÷¼ÓÔØµÄ£¬ÕâÒ²ÊÇÐéÄâ»úά»¤²»Í¬Ãü
Ãû¿Õ¼äµÄ¹ý³Ì¡£ÏêÇé²Î¼ûµÚ°ËÕ¡°The Linking Model¡±
6£©¡¢Ö¸ÏòClassÀàµÄÒýÓã¨A reference to class Class£©
JavaÐéÄâ»úΪÿһ¸ö¼ÓÔØµÄÀàÐÍ´´½¨Ò»¸öjava.lang.ClassÀàµÄʵÀý¡£ÄãÒ²¿ÉÒÔͨ¹ýClassÀàµÄ·½·¨£º
public static Class forName(String className)À´²éÕÒ»òÕß¼ÓÔØÒ»¸öÀ࣬²¢È¡µÃÏàÓ¦µÄClassÀàµÄʵÀý¡£Í¨¹ýÕâ¸öClassÀàµÄʵÀý£¬ÎÒÃÇ¿ÉÒÔ·ÃÎÊJavaÐéÄâ»ú·½·¨ÇøÖеÄÐÅÏ¢¡£¾ßÌå²ÎÕÕClassÀàµÄJavaDoc¡£
2¡¢·½·¨ÁÐ±í£¨Method Tables£©
ΪÁ˸üÓÐЧµÄ·ÃÎÊËùÓб£´æÔÚ·½·¨ÇøÖеÄÊý¾Ý£¬ÕâЩÊý¾ÝµÄ´æ´¢½á¹¹±ØÐë¾¹ý×ÐϸµÄÉè¼Æ¡£ËùÓз½·¨ÇøÖУ¬³ýÁ˱£´æÁËÉϱߵÄÄÇЩÔʼÐÅÏ¢Í⣬»¹ÓÐÒ»¸öΪÁË¼Ó¿ì´æ
È¡ËٶȶøÉè¼ÆµÄÊý¾Ý½á¹¹£¬±ÈÈç·½·¨ÁÐ±í¡£Ã¿Ò»¸ö±»¼ÓÔØµÄ·Ç³éÏóÀ࣬JavaÐéÄâ»ú¶¼»áΪËûÃDzúÉúÒ»¸ö·½·¨ÁÐ±í£¬Õâ¸öÁбíÖб£´æÁËÕâ¸öÀà¿ÉÄܵ÷ÓõÄËùÓÐʵÀý
·½·¨µÄÒýÓ㬱¨´íÄÇЩ¸¸ÀàÖе÷Óõķ½·¨¡£ÏêÇé²Î¼ûµÚ°ËÕ¡°The Linking Model¡±
Îå¡¢¶Ñ£º
µ±Java³ÌÐò´´½¨Ò»¸öÀàµÄʵÀý»òÕßÊý×éʱ£¬¶¼ÔÚ¶ÑÖÐΪеĶÔÏó·ÖÅäÄÚ´æ¡£ÐéÄâ»úÖÐÖ»ÓÐÒ»¸ö¶Ñ£¬ËùÓеÄÏ̶߳¼¹²ÏíËû¡£
1¡¢À¬»øÊÕ¼¯£¨Garbage Collection£©
À¬»øÊÕ¼¯ÊÇÊÍ·ÅûÓб»ÒýÓõĶÔÏóµÄÖ÷Òª·½·¨¡£ËüÒ²¿ÉÄÜ»áΪÁ˼õÉٶѵÄË鯬£¬¶øÒƶ¯¶ÔÏó¡£ÔÚJavaÐéÄâ»úµÄ¹æ·¶ÖÐûÓÐÑϸñ¶¨ÒåÀ¬»øÊÕ¼¯£¬Ö»ÊǶ¨ÒåÒ»¸öJavaÐéÄâ»úµÄʵÏÖ±ØÐëͨ¹ýijÖÖ·½Ê½¹ÜÀí×Ô¼ºµÄ¶Ñ¡£ÏêÇé²Î¼ûµÚ¾ÅÕ¡°Garbage
Collection¡±¡£
2¡¢¶ÔÏó´æ´¢½á¹¹£¨Object Representation£©
JavaÐéÄâ»úµÄ¹æ·¶ÖÐûÓж¨Òå¶ÔÏóÔõÑùÔÚ¶ÑÖд洢¡£Ã¿Ò»¸ö¶ÔÏóÖ÷Òª´æ´¢µÄÊÇËûµÄÀàºÍ¸¸ÀàÖж¨ÒåµÄ¶ÔÏó±äÁ¿¡£¶ÔÓÚ¸ø¶¨µÄ¶ÔÏóµÄÒýÓã¬ÐéÄâ»ú±ØÐëÄÛññºÜ¿ìµÄ
¶¨Î»µ½Õâ¸ö¶ÔÏóµÄÊý¾Ý¡£ÁíΪ£¬±ØÐëÌṩһÖÖͨ¹ý¶ÔÏóµÄÒýÓ÷½·¨¶ÔÏóÊý¾ÝµÄ·½·¨£¬±ÈÈç·½·¨ÇøÖеĶÔÏóµÄÒýÓã¬ËùÒÔÒ»¸ö¶ÔÏó±£´æµÄÊý¾ÝÖÐÍùÍùº¬ÓÐÒ»¸öijÖÖÐÎʽ
Ö¸Ïò·½·¨ÇøµÄÖ¸Õë¡£
Ò»¸ö¿ÉÄܵĶѵÄÉè¼ÆÊǽ«¶Ñ·ÖΪÁ½¸ö²¿·Ö£ºÒýÓóغͶÔÏ󳨡£Ò»¸ö¶ÔÏóµÄÒýÓþÍÊÇÖ¸ÏòÒýÓóصı¾µØÖ¸Õ롣ÿһ¸öÒýÓóØÖеÄÌõÄ¿¶¼°üº¬Á½¸ö²¿·Ö£ºÖ¸Ïò¶ÔÏó³ØÖжÔ
ÏóÊý¾ÝµÄÖ¸ÕëºÍ·½·¨ÇøÖжÔÏóÀàÊý¾ÝµÄÖ¸Õë¡£ÕâÖÖÉè¼ÆÄܹ»·½±ãJavaÐéÄâ»ú¶ÑË鯬µÄÕûÀí¡£µ±ÐéÄâ»úÔÚ¶ÔÏó³ØÖÐÒÆ¶¯Ò»¸ö¶ÔÏóµÄʱºò£¬Ö»ÐèÒªÐ޸ĶÔÓ¦ÒýÓóØÖÐ
µÄÖ¸ÕëµØÖ·¡£µ«ÊÇÿ´Î·ÃÎʶÔÏóµÄÊý¾Ý¶¼ÐèÒª´¦ÀíÁ½´ÎÖ¸Õë¡£ÏÂͼÑÝʾÁËÕâÖֶѵÄÉè¼Æ¡£ÔÚµÚ¾ÅÕµġ°À¬»øÊÕ¼¯¡±ÖеÄHeapOfFish
AppletÑÝʾÁËÕâÖÖÉè¼Æ¡£
ÁíÒ»ÖֶѵÄÉè¼ÆÊÇ£ºÒ»¸ö¶ÔÏóµÄÒýÓþÍÊÇÒ»¸öÖ¸ÏòÒ»¶ÑÊý¾ÝºÍÖ¸ÏòÏàÓ¦¶ÔÏóµÄÆ«ÒÆÖ¸Õë¡£ÕâÖÖÉè¼Æ·½±ãÁ˶ÔÏóµÄ·ÃÎÊ£¬¿ÉÊǶÔÏóµÄÒÆ¶¯Òª±äµÄÒì³£¸´ÔÓ¡£ÏÂͼÑÝʾÁËÕâÖÖÉè¼Æ
µ±³ÌÐòÊÔͼ½«Ò»¸ö¶ÔÏóת»»ÎªÁíÒ»ÖÖÀàÐÍʱ£¬ÐéÄâ»úÐèÒªÅжÏÕâÖÖת»»ÊÇ·ñÊÇÕâ¸ö¶ÔÏóµÄÀàÐÍ£¬»òÕßÊÇËûµÄ¸¸ÀàÐÍ¡£µ±³ÌÐòÊÊÓÃinstanceofÓï¾äµÄʱºòÒ²
»á×öÀàËÆµÄÊÂÇé¡£µ±³ÌÐòµ÷ÓÃÒ»¸ö¶ÔÏóµÄ·½·¨Ê±£¬ÐéÄâ»úÐèÒª½øÐж¯Ì¬°ó¶¨£¬Ëû±ØÐëÅжϵ÷ÓÃÄÄÒ»¸öÀàÐ͵ķ½·¨¡£ÕâÒ²ÐèÒª×öÉÏÃæµÄÅжϡ£
ÎÞÂÛÐéÄâ»úʵÏÖÕßʹÓÃÄÄÒ»ÖÖÉè¼Æ£¬Ëû¶¼¿ÉÄÜΪÿһ¸ö¶ÔÏó±£´æÒ»¸öÀàËÆ·½·¨ÁбíµÄÐÅÏ¢¡£ÒòΪËû¿ÉÒÔÌáÉý¶ÔÏó·½·¨µ÷ÓõÄËÙ¶È£¬¶ÔÌáÉýÐéÄâ»úµÄÐÔÄܷdz£ÖØÒª£¬µ«
ÊÇÐéÄâ»úµÄ¹æ·¶ÖбÈûÓÐÒªÇó±ØÐëʵÏÖÀàËÆµÄÊý¾Ý½á¹¹¡£ÏÂͼÃèÊöÁËÕâÖֽṹ¡£Í¼ÖÐÏÔʾÁËÒ»¸ö¶ÔÏóÒýÓÃÏà¹ØÁªµÄËùÓеÄÊý¾Ý½á¹¹£¬°üÀ¨£º
1£©¡¢Ò»¸öÖ¸ÏòÀàÐÍÊý¾ÝµÄÖ¸Õë
2£©¡¢Ò»¸ö¶ÔÏóµÄ·½·¨ÁÐ±í¡£·½·¨ÁбíÊÇÒ»¸öÖ¸ÏòËùÓпÉÄܱ»µ÷ÓöÔÏó·½·¨µÄÖ¸ÕëÊý×é¡£·½·¨Êý¾Ý°üÀ¨Èý¸ö²¿·Ö£º²Ù×÷Âë¶ÑÕ»µÄ´óСºÍ·½·¨¶ÑÕ»µÄ±¾µØ±äÁ¿Çø£»·½·¨µÄ×Ö½ÚÂ룻Òì³£ÁÐ±í¡£
ÿһ¸öJavaÐéÄâ»úÖеĶÔÏó±ØÐë¹ØÁªÒ»¸öÓÃÓÚͬ²½¶àÏ̵߳Älock(mutex)¡£Í¬Ò»Ê±¿Ì£¬Ö»ÄÜÓÐÒ»¸ö¶ÔÏóÓµÓÐÕâ¸ö¶ÔÏóµÄËø¡£µ±Ò»¸öÓµÓÐÕâ¸öÕâ¸ö¶ÔÏó
µÄËø£¬Ëû¾Í¿ÉÒÔ¶à´ÎÉêÇëÕâ¸öËø£¬µ«ÊÇÒ²±ØÐëÊÍ·ÅÏàÓ¦´ÎÊýµÄËø²ÅÄÜÕæÕýÊÍ·ÅÕâ¸ö¶ÔÏóËø¡£ºÜ¶à¶ÔÏóÔÚÕû¸öÉúÃüÖÜÆÚÖж¼²»»á±»Ëø£¬ËùÒÔÕâ¸öÐÅÏ¢Ö»ÓÐÔÚÐèҪʱ²ÅÐè
ÒªÌí¼Ó¡£ºÜ¶àJavaÐéÄâ»úµÄʵÏÖ¶¼Ã»ÓÐÔÚ¶ÔÏóµÄÊý¾ÝÖаüº¬¡°Ëø¶¨Êý¾Ý¡±£¬Ö»ÊÇÔÚÐèҪʱ²ÅÉú³ÉÏàÓ¦µÄÊý¾Ý¡£³ýÁËʵÏÖ¶ÔÏóµÄËø¶¨£¬Ã¿Ò»¸ö¶ÔÏó»¹Âß¼¹ØÁªµ½Ò»
¸ö¡°wait set¡±µÄʵÏÖ¡£Ëø¶¨°ï×éÏ̶߳ÀÁ¢´¦Àí¹²ÏíµÄÊý¾Ý£¬²»ÐèÒª·Á°ÆäËûµÄÏ̡߳£¡°wait set¡±°ï×éÏß³ÌÐ×÷Íê³Éͬһ¸öÄ¿±ê¡£¡°wait
set¡±ÍùÍùͨ¹ýObjectÀàµÄwait()ºÍnotify()·½·¨À´ÊµÏÖ¡£
À¬»øÊÕ¼¯Ò²ÐèÒª¶ÑÖеĶÔÏóÊÇ·ñ±»¹ØÁªµÄÐÅÏ¢¡£JavaÐéÄâ»ú¹æ·¶ÖÐÖ¸³öÀ¬»øÊÕ¼¯Ò»¸öÔËÐÐÒ»¸ö¶ÔÏóµÄfinalizer·½·¨Ò»´Î£¬µ«ÊÇÈÝÐí
finalizer·½·¨ÖØÐÂÒýÓÃÕâ¸ö¶ÔÏ󣬵±Õâ¸ö¶ÔÏóÔٴβ»±»ÒýÓÃʱ£¬¾Í²»ÐèÒªÔٴε÷ÓÃfinalize·½·¨¡£ËùÒÔÐéÄâ»úÒ²ÐèÒª±£´æfinalize·½·¨
ÊÇ·ñÔËÐйýµÄÐÅÏ¢¡£¸ü¶àÐÅÏ¢²Î¼ûµÚ¾ÅÕµġ°À¬»øÊÕ¼¯¡±
3¡¢Êý×éµÄ±£´æ£¨Array Representation£©
ÔÚJava ÖУ¬Êý×éÊÇÒ»ÖÖÍêÈ«ÒâÒåÉϵĶÔÏó£¬ËûºÍ¶ÔÏóÒ»Ñù±£´æÔÚ¶ÑÖС¢ÓÐÒ»¸öÖ¸ÏòClassÀàʵÀýµÄÒýÓá£ËùÓÐͬһά¶ÈºÍÀàÐ͵ÄÊý×éÓµÓÐͬÑùµÄClass£¬Êý×éµÄ³¤
¶È²»×ö¿¼ÂÇ¡£¶ÔÓ¦ClassµÄÃû×Ö±íʾΪά¶ÈºÍÀàÐÍ¡£±ÈÈçÒ»¸öÕûÐÍÊý¾ÝµÄClassΪ¡°[I¡±£¬×Ö½ÚÐÍÈýάÊý×éClassÃûΪ¡°[[[B¡±£¬Á½Î¬¶ÔÏóÊý¾Ý
ClassÃûΪ¡°[[Ljava.lang.Object¡±¡£
Êý×鱨ÐëÔÚ¶ÑÖб£´æÊý×éµÄ³¤¶È£¬Êý×éµÄÊý¾ÝºÍһЩ¶ÔÏóÊý×éÀàÐÍÊý¾ÝµÄÒýÓá£Í¨¹ýÒ»¸öÊý×éÒýÓõģ¬ÐéÄâ»úÓ¦¸ÃÄܹ»È¡µÃÒ»¸öÊý×éµÄ³¤¶È£¬Í¨¹ýË÷ÒýÄܹ»·ÃÎÊÌØ¶¨
µÄÊý¾Ý£¬Äܹ»µ÷ÓÃObject¶¨ÒåµÄ·½·¨¡£ObjectÊÇËùÓÐÊý¾ÝÀàµÄÖ±½Ó¸¸Àà¡£¸ü¶àÐÅÏ¢²Î¼ûµÚÁùÕ¡°ÀàÎļþ¡±¡£
Áù¡¢»ù±¾½á¹¹£º
´ÓJavaƽ̨µÄÂß¼½á¹¹ÉÏÀ´¿´£¬ÎÒÃÇ¿ÉÒÔ´ÓÏÂͼÀ´Á˽âJVM£º

´ÓÉÏͼÄÜÇåÎú¿´µ½Javaƽ̨°üº¬µÄ¸÷¸öÂ߼ģ¿é£¬Ò²ÄÜÁ˽⵽JDKÓëJREµÄÇø±ð¡£
JVM×ÔÉíµÄÎïÀí½á¹¹

´Ëͼ¿´³öjvmÄÚ´æ½á¹¹
JVMÄÚ´æ½á¹¹Ö÷Òª°üÀ¨Á½¸ö×ÓϵͳºÍÁ½¸ö×é¼þ¡£Á½¸ö×Óϵͳ·Ö±ðÊÇClassloader×ÓϵͳºÍExecutionengine(Ö´ÐÐÒýÇæ)×Óϵͳ£»Á½¸ö×é¼þ·Ö±ðÊÇRuntimedataarea(ÔËÐÐʱÊý¾ÝÇøÓò)×é¼þºÍNativeinterface(±¾µØ½Ó¿Ú)×é¼þ¡£
Classloader×ÓϵͳµÄ×÷Óãº
¸ù¾Ý¸ø¶¨µÄÈ«ÏÞ¶¨ÃûÀàÃû(Èçjava.lang.Object)À´×°ÔØclassÎļþµÄÄÚÈݵ½RuntimedataareaÖеÄmethodarea(·½·¨ÇøÓò)¡£Java³ÌÐòÔ±¿ÉÒÔextendsjava.lang.ClassLoaderÀàÀ´Ð´×Ô¼ºµÄClassloader¡£
Executionengine×ÓϵͳµÄ×÷Óãº
Ö´ÐÐclassesÖеÄÖ¸Áî¡£ÈκÎJVMspecificationʵÏÖ(JDK)µÄºËÐͼÊÇExecutionengine£¬²»Í¬µÄJDKÀýÈçSunµÄJDKºÍIBMµÄJDKºÃ»µÖ÷Òª¾ÍÈ¡¾öÓÚËûÃǸ÷×ÔʵÏÖµÄExecutionengineµÄºÃ»µ¡£
Nativeinterface×é¼þ£º
Óënativelibraries½»»¥£¬ÊÇÆäËü±à³ÌÓïÑÔ½»»¥µÄ½Ó¿Ú¡£µ±µ÷ÓÃnative·½·¨µÄʱºò£¬¾Í½øÈëÁËÒ»¸öȫеIJ¢ÇÒ²»ÔÙÊÜÐéÄâ»úÏÞÖÆµÄÊÀ½ç£¬ËùÒÔÒ²ºÜÈÝÒ׳öÏÖJVMÎÞ·¨¿ØÖƵÄnativeheapOutOfMemory¡£
RuntimeDataArea×é¼þ£º
Õâ¾ÍÊÇÎÒÃdz£ËµµÄJVMµÄÄÚ´æÁË¡£ËüÖ÷Òª·ÖΪÎå¸ö²¿·Ö¡ª¡ª
1¡¢Heap(¶Ñ)£ºÒ»¸öJavaÐéÄâʵÀýÖÐÖ»´æÔÚÒ»¸ö¶Ñ¿Õ¼ä
2¡¢MethodArea(·½·¨ÇøÓò)£º±»×°ÔصÄclassµÄÐÅÏ¢´æ´¢ÔÚMethodareaµÄÄÚ´æÖС£µ±ÐéÄâ»ú×°ÔØÄ³¸öÀàÐÍʱ£¬ËüʹÓÃÀà×°ÔØÆ÷¶¨Î»ÏàÓ¦µÄclassÎļþ£¬È»ºó¶ÁÈëÕâ¸öclassÎļþÄÚÈݲ¢°ÑËü´«Êäµ½ÐéÄâ»úÖС£
3¡¢JavaStack(javaµÄÕ»)£ºÐéÄâ»úÖ»»áÖ±½Ó¶ÔJavastackÖ´ÐÐÁ½ÖÖ²Ù×÷£ºÒÔ֡Ϊµ¥Î»µÄѹջ»ò³öÕ»
4¡¢ProgramCounter(³ÌÐò¼ÆÊýÆ÷)£ºÃ¿Ò»¸öÏ̶߳¼ÓÐËü×Ô¼ºµÄPC¼Ä´æÆ÷£¬Ò²ÊǸÃÏß³ÌÆô¶¯Ê±´´½¨µÄ¡£PC¼Ä´æÆ÷µÄÄÚÈÝ×ÜÊÇÖ¸ÏòÏÂÒ»Ìõ½«±»Ö´ÐÐÖ¸ÁîµÄ¶öµØÖ·£¬ÕâÀïµÄµØÖ·¿ÉÒÔÊÇÒ»¸ö±¾µØÖ¸Õ룬Ҳ¿ÉÒÔÊÇÔÚ·½·¨ÇøÖÐÏà¶ÔÓ¦Óڸ÷½·¨ÆðʼָÁîµÄÆ«ÒÆÁ¿¡£
5¡¢Nativemethodstack(±¾µØ·½·¨Õ»)£º±£´ænative·½·¨½øÈëÇøÓòµÄµØÖ·
¶ÔÓÚJVMµÄѧϰ£¬ÔÚÎÒ¿´À´Õâô¼¸¸ö²¿·Ö×îÖØÒª£º
Java´úÂë±àÒëºÍÖ´ÐеÄÕû¸ö¹ý³Ì
JVMÄÚ´æ¹ÜÀí¼°À¬»ø»ØÊÕ»úÖÆ
Java´úÂë±àÒëºÍÖ´ÐеÄÕû¸ö¹ý³Ì
Java´úÂë±àÒëÊÇÓÉJavaÔ´Âë±àÒëÆ÷À´Íê³É£¬Á÷³ÌͼÈçÏÂËùʾ£º

Java×Ö½ÚÂëµÄÖ´ÐÐÊÇÓÉJVMÖ´ÐÐÒýÇæÀ´Íê³É£¬Á÷³ÌͼÈçÏÂËùʾ£º

Java´úÂë±àÒëºÍÖ´ÐеÄÕû¸ö¹ý³Ì°üº¬ÁËÒÔÏÂÈý¸öÖØÒªµÄ»úÖÆ£º
JavaÔ´Âë±àÒë»úÖÆ
Àà¼ÓÔØ»úÖÆ
ÀàÖ´ÐлúÖÆ
JavaÔ´Âë±àÒë»úÖÆ
Java Ô´Âë±àÒëÓÉÒÔÏÂÈý¸ö¹ý³Ì×é³É£º£¨javac ¨Cverbose Êä³öÓйرàÒëÆ÷ÕýÔÚÖ´ÐеIJÙ×÷µÄÏûÏ¢£©
·ÖÎöºÍÊäÈëµ½·ûºÅ±í
×¢½â´¦Àí
ÓïÒå·ÖÎöºÍÉú³ÉclassÎļþ

×îºóÉú³ÉµÄclassÎļþÓÉÒÔϲ¿·Ö×é³É£º
½á¹¹ÐÅÏ¢¡£°üÀ¨classÎļþ¸ñʽ°æ±¾ºÅ¼°¸÷²¿·ÖµÄÊýÁ¿Óë´óСµÄÐÅÏ¢
ÔªÊý¾Ý¡£¶ÔÓ¦ÓÚJavaÔ´ÂëÖÐÉùÃ÷Óë³£Á¿µÄÐÅÏ¢¡£°üº¬Àà/¼Ì³ÐµÄ³¬Àà/ʵÏֵĽӿڵÄÉùÃ÷ÐÅÏ¢¡¢ÓòÓë·½·¨ÉùÃ÷ÐÅÏ¢ºÍ³£Á¿³Ø
·½·¨ÐÅÏ¢¡£¶ÔÓ¦JavaÔ´ÂëÖÐÓï¾äºÍ±í´ïʽ¶ÔÓ¦µÄÐÅÏ¢¡£°üº¬×Ö½ÚÂë¡¢Òì³£´¦ÀíÆ÷±í¡¢ÇóÖµÕ»Óë¾Ö²¿±äÁ¿Çø´óС¡¢ÇóÖµÕ»µÄÀàÐͼǼ¡¢µ÷ÊÔ·ûºÅÐÅÏ¢
¡¢
Àà¼ÓÔØ»úÖÆ
JVMµÄÀà¼ÓÔØÊÇͨ¹ýClassLoader¼°Æä×ÓÀàÀ´Íê³ÉµÄ£¬ÀàµÄ²ã´Î¹ØÏµºÍ¼ÓÔØË³Ðò¿ÉÒÔÓÉÏÂͼÀ´ÃèÊö£º

1£©Bootstrap ClassLoader /Æô¶¯Àà¼ÓÔØÆ÷
$JAVA_HOMEÖÐjre/lib/rt.jarÀïËùÓеÄclass£¬ÓÉC++ʵÏÖ£¬²»ÊÇClassLoader×ÓÀà
2£©Extension ClassLoader/À©Õ¹Àà¼ÓÔØÆ÷
¸ºÔð¼ÓÔØjavaƽ̨ÖÐÀ©Õ¹¹¦ÄܵÄһЩjar°ü£¬°üÀ¨$JAVA_HOMEÖÐjre/lib/*.jar»ò-Djava.ext.dirsÖ¸¶¨Ä¿Â¼ÏµÄjar°ü
3£©App ClassLoader/ ϵͳÀà¼ÓÔØÆ÷
¸ºÔð¼ÇÔØclasspathÖÐÖ¸¶¨µÄjar°ü¼°Ä¿Â¼ÖÐclass
4£©Custom ClassLoader/Óû§×Ô¶¨ÒåÀà¼ÓÔØÆ÷(java.lang.ClassLoaderµÄ×ÓÀà)
ÊôÓÚÓ¦ÓóÌÐò¸ù¾Ý×ÔÉíÐèÒª×Ô¶¨ÒåµÄClassLoader£¬Èçtomcat¡¢jboss¶¼»á¸ù¾Ýj2ee¹æ·¶×ÔÐÐʵÏÖClassLoader
¼ÓÔØ¹ý³ÌÖлáÏȼì²éÀàÊÇ·ñ±»ÒѼÓÔØ£¬¼ì²é˳ÐòÊÇ×Ôµ×ÏòÉÏ£¬´ÓCustom ClassLoaderµ½BootStrap
ClassLoaderÖð²ã¼ì²é£¬Ö»ÒªÄ³¸öclassloaderÒѼÓÔØ¾ÍÊÓΪÒѼÓÔØ´ËÀ࣬±£Ö¤´ËÀàÖ»ËùÓÐClassLoader¼ÓÔØÒ»´Î¡£¶ø¼ÓÔØµÄ˳ÐòÊÇ×Ô¶¥ÏòÏ£¬Ò²¾ÍÊÇÓÉÉϲãÀ´Öð²ã³¢ÊÔ¼ÓÔØ´ËÀà¡£
Àà¼ÓÔØË«Ç×ίÅÉ»úÖÆ½éÉܺͷÖÎö
ÔÚÕâÀÐèÒª×ÅÖØËµÃ÷µÄÊÇ£¬JVMÔÚ¼ÓÔØÀàʱĬÈϲÉÓõÄÊÇË«Ç×ίÅÉ»úÖÆ¡£Í¨Ë׵Ľ²£¬¾ÍÊÇij¸öÌØ¶¨µÄÀà¼ÓÔØÆ÷ÔÚ½Óµ½¼ÓÔØÀàµÄÇëÇóʱ£¬Ê×ÏȽ«¼ÓÔØÈÎÎñίÍиø¸¸Àà¼ÓÔØÆ÷£¬ÒÀ´ÎµÝ¹é£¬Èç¹û¸¸Àà¼ÓÔØÆ÷¿ÉÒÔÍê³ÉÀà¼ÓÔØÈÎÎñ£¬¾Í³É¹¦·µ»Ø£»Ö»Óи¸Àà¼ÓÔØÆ÷ÎÞ·¨Íê³É´Ë¼ÓÔØÈÎÎñʱ£¬²Å×Ô¼ºÈ¥¼ÓÔØ¡£
ÀàÖ´ÐлúÖÆ
¡¡¡¡JVMÊÇ»ùÓÚÕ»µÄÌåϵ½á¹¹À´Ö´ÐÐclass×Ö½ÚÂëµÄ¡£Ï̴߳´½¨ºó£¬¶¼»á²úÉú³ÌÐò¼ÆÊýÆ÷£¨PC£©ºÍÕ»£¨Stack£©£¬³ÌÐò¼ÆÊýÆ÷´æ·ÅÏÂÒ»ÌõÒªÖ´ÐеÄÖ¸ÁîÔÚ·½·¨Ä򵀮«ÒÆÁ¿£¬Õ»Öдæ·ÅÒ»¸ö¸öÕ»Ö¡£¬Ã¿¸öÕ»Ö¡¶ÔÓ¦×Åÿ¸ö·½·¨µÄÿ´Îµ÷Ó㬶øÕ»Ö¡ÓÖÊÇÓоֲ¿±äÁ¿ÇøºÍ²Ù×÷ÊýÕ»Á½²¿·Ö×é³É£¬¾Ö²¿±äÁ¿ÇøÓÃÓÚ´æ·Å·½·¨Öеľֲ¿±äÁ¿ºÍ²ÎÊý£¬²Ù×÷ÊýÕ»ÖÐÓÃÓÚ´æ·Å·½·¨Ö´Ðйý³ÌÖвúÉúµÄÖмä½á¹û¡£
ÄÚ´æ¹ÜÀíºÍÀ¬»ø»ØÊÕ
JVMÄÚ´æ×é³É½á¹¹
JVMÕ»Óɶѡ¢Õ»¡¢±¾µØ·½·¨Õ»¡¢·½·¨ÇøµÈ²¿·Ö×é³É£¬½á¹¹Í¼ÈçÏÂËùʾ£º

JVMÄÚ´æ»ØÊÕ
SunµÄJVMGenerationalCollecting(À¬»ø»ØÊÕ)ÔÀíÊÇÕâÑùµÄ£º°Ñ¶ÔÏó·ÖΪÄêÇà´ú(Young)¡¢ÄêÀÏ´ú(Tenured)¡¢³Ö¾Ã´ú(Perm)£¬¶Ô²»Í¬ÉúÃüÖÜÆÚµÄ¶ÔÏóʹÓò»Í¬µÄËã·¨¡£(»ùÓÚ¶Ô¶ÔÏóÉúÃüÖÜÆÚ·ÖÎö)

1.Young£¨ÄêÇá´ú£©
ÄêÇá´ú·ÖÈý¸öÇø¡£Ò»¸öEdenÇø£¬Á½¸öSurvivorÇø¡£´ó²¿·Ö¶ÔÏóÔÚEdenÇøÖÐÉú³É¡£µ±EdenÇøÂúʱ£¬»¹´æ»îµÄ¶ÔÏ󽫱»¸´ÖƵ½SurvivorÇø£¨Á½¸öÖеÄÒ»¸ö£©£¬µ±Õâ¸öSurvivorÇøÂúʱ£¬´ËÇøµÄ´æ»î¶ÔÏ󽫱»¸´ÖƵ½ÁíÍâÒ»¸öSurvivorÇø£¬µ±Õâ¸öSurvivorÈ¥Ò²ÂúÁ˵Äʱºò£¬´ÓµÚÒ»¸öSurvivorÇø¸´ÖƹýÀ´µÄ²¢ÇÒ´Ëʱ»¹´æ»îµÄ¶ÔÏ󣬽«±»¸´ÖÆÄêÀÏÇø(Tenured¡£ÐèҪעÒ⣬SurvivorµÄÁ½¸öÇøÊǶԳƵģ¬Ã»ÏȺó¹ØÏµ£¬ËùÒÔͬһ¸öÇøÖпÉÄÜͬʱ´æÔÚ´ÓEden¸´ÖƹýÀ´¶ÔÏ󣬺ʹÓǰһ¸öSurvivor¸´ÖƹýÀ´µÄ¶ÔÏ󣬶ø¸´ÖƵ½ÄêÀÏÇøµÄÖ»ÓдӵÚÒ»¸öSurvivorÈ¥¹ýÀ´µÄ¶ÔÏó¡£¶øÇÒ£¬SurvivorÇø×ÜÓÐÒ»¸öÊǿյġ£
2.Tenured£¨ÄêÀÏ´ú£©
ÄêÀÏ´ú´æ·Å´ÓÄêÇá´ú´æ»îµÄ¶ÔÏó¡£Ò»°ãÀ´ËµÄêÀÏ´ú´æ·ÅµÄ¶¼ÊÇÉúÃüÆÚ½Ï³¤µÄ¶ÔÏó¡£
3.Perm£¨³Ö¾Ã´ú£©
ÓÃÓÚ´æ·Å¾²Ì¬Îļþ£¬Èç½ñJavaÀà¡¢·½·¨µÈ¡£³Ö¾Ã´ú¶ÔÀ¬»ø»ØÊÕûÓÐÏÔÖøÓ°Ï죬µ«ÊÇÓÐЩӦÓÿÉÄܶ¯Ì¬Éú³É»òÕßµ÷ÓÃһЩclass£¬ÀýÈçHibernateµÈ£¬ÔÚÕâÖÖʱºòÐèÒªÉèÖÃÒ»¸ö±È½Ï´óµÄ³Ö¾Ã´ú¿Õ¼äÀ´´æ·ÅÕâЩÔËÐйý³ÌÖÐÐÂÔöµÄÀà¡£³Ö¾Ã´ú´óСͨ¹ý-XX:MaxPermSize=½øÐÐÉèÖá£
¾Ù¸öÀý×Ó£ºµ±ÔÚ³ÌÐòÖÐÉú³É¶ÔÏóʱ£¬Õý³£¶ÔÏó»áÔÚÄêÇá´úÖзÖÅä¿Õ¼ä£¬Èç¹ûÊǹý´óµÄ¶ÔÏóÒ²¿ÉÄÜ»áÖ±½ÓÔÚÄêÀÏ´úÉú³É£¨¾Ý¹Û²âÔÚÔËÐÐij³ÌÐòʱºòÿ´Î»áÉú³ÉÒ»¸öÊ®Õ׵ĿռäÓÃÊÕ·¢ÏûÏ¢£¬Õⲿ·ÖÄÚ´æ¾Í»áÖ±½ÓÔÚÄêÀÏ´ú·ÖÅ䣩¡£ÄêÇá´úÔڿռ䱻·ÖÅäÍêµÄʱºò¾Í»á·¢ÆðÄÚ´æ»ØÊÕ£¬´ó²¿·ÖÄÚ´æ»á±»»ØÊÕ£¬Ò»²¿·ÖÐÒ´æµÄÄÚ´æ»á±»¿½±´ÖÁSurvivorµÄfromÇø£¬¾¹ý¶à´Î»ØÊÕÒÔºóÈç¹ûfromÇøÄÚ´æÒ²·ÖÅäÍê±Ï£¬¾Í»áÒ²·¢ÉúÄÚ´æ»ØÊÕÈ»ºó½«Ê£ÓàµÄ¶ÔÏó¿½±´ÖÁtoÇø¡£µÈµ½toÇøÒ²ÂúµÄʱºò£¬¾Í»áÔٴη¢ÉúÄÚ´æ»ØÊÕÈ»ºó°ÑÐÒ´æµÄ¶ÔÏó¿½±´ÖÁÄêÀÏÇø¡£
ͨ³£ÎÒÃÇ˵µÄJVMÄÚ´æ»ØÊÕ×ÜÊÇÔÚÖ¸¶ÑÄÚ´æ»ØÊÕ£¬È·ÊµÖ»ÓжÑÖеÄÄÚÈÝÊǶ¯Ì¬ÉêÇë·ÖÅäµÄ£¬ËùÒÔÒÔÉ϶ÔÏóµÄÄêÇá´úºÍÄêÀÏ´ú¶¼ÊÇÖ¸µÄJVMµÄHeap¿Õ¼ä£¬¶ø³Ö¾Ã´úÔòÊÇ֮ǰÌáµ½µÄMethodArea£¬²»ÊôÓÚHeap¡£
¹ØÓÚJVMÄÚ´æ¹ÜÀíµÄһЩ½¨Òé
1¡¢ÊÖ¶¯½«Éú³ÉµÄÎÞÓöÔÏó£¬Öмä¶ÔÏóÖÃΪnull£¬¼Ó¿ìÄÚ´æ»ØÊÕ¡£
2¡¢¶ÔÏ󳨼¼ÊõÈç¹ûÉú³ÉµÄ¶ÔÏóÊÇ¿ÉÖØÓõĶÔÏó£¬Ö»ÊÇÆäÖеÄÊôÐÔ²»Í¬Ê±£¬¿ÉÒÔ¿¼ÂDzÉÓöÔÏó³ØÀ´½ÏÉÙ¶ÔÏóµÄÉú³É¡£Èç¹ûÓпÕÏеĶÔÏó¾Í´Ó¶ÔÏó³ØÖÐÈ¡³öʹÓã¬Ã»ÓÐÔÙÉú³ÉеĶÔÏ󣬴ó´óÌá¸ßÁ˶ÔÏóµÄ¸´ÓÃÂÊ¡£
3¡¢JVMµ÷ÓÅͨ¹ýÅäÖÃJVMµÄ²ÎÊýÀ´Ìá¸ßÀ¬»ø»ØÊÕµÄËÙ¶È£¬Èç¹ûÔÚûÓгöÏÖÄÚ´æÐ¹Â¶ÇÒÉÏÃæÁ½ÖÖ°ì·¨¶¼²»Äܱ£Ö¤JVMÄÚ´æ»ØÊÕʱ£¬¿ÉÒÔ¿¼ÂDzÉÓÃJVMµ÷Óŵķ½Ê½À´½â¾ö£¬²»¹ýÒ»¶¨Òª¾¹ýʵÌå»úµÄ³¤ÆÚ²âÊÔ£¬ÒòΪ²»Í¬µÄ²ÎÊý¿ÉÄÜÒýÆð²»Í¬µÄЧ¹û¡£Èç-Xnoclassgc²ÎÊýµÈ¡£ |