±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬Ö÷Òª½²½âÁËJVMµÄ×é³ÉºÍÔËÐÐÔÀí£¬JVMµÄͳһÊý¾Ý¸ñʽ¹æ·¶¡¢×Ö½ÚÂëÎļþ½á¹¹£¬JVM¹ØÓÚÄÚ´æµÄ¹ÜÀí¡£ |
|
JVMÊÇÐéÄâ»ú£¬Ò²ÊÇÒ»Öֹ淶£¬Ëû×ñÑ×ŷ롤ŵÒÀÂüÌåϵ½á¹¹µÄÉè¼ÆÔÀí¡£·ë¡¤ÅµÒÀÂüÌåϵ½á¹¹ÖУ¬Ö¸³ö¼ÆËã»ú´¦ÀíµÄÊý¾ÝºÍÖ¸Áî¶¼ÊǶþ½øÖÆÊý£¬²ÉÓô洢³ÌÐò·½Ê½²»¼ÓÇø·ÖµÄ´æ´¢ÔÚͬһ¸ö´æ´¢Æ÷À²¢ÇÒ˳ÐòÖ´ÐУ¬Ö¸ÁîÓɲÙ×÷ÂëºÍµØÖ·Âë×é³É£¬²Ù×÷Âë¾ö¶¨Á˲Ù×÷ÀàÐͺÍËù²Ù×÷µÄÊýµÄÊý×ÖÀàÐÍ£¬µØÖ·ÂëÔòÖ¸³öµØÖ·ÂëºÍ²Ù×÷Êý¡£´Ódosµ½window8£¬´Óunixµ½ubuntuºÍCentOS£¬»¹ÓÐMAC
OSµÈµÈ£¬²»Í¬µÄ²Ù×÷ϵͳָÁÒÔ¼°Êý¾Ý½á¹¹¶¼ÓÐ×ŲîÒ죬¶øJVMͨ¹ýÔÚ²Ù×÷ϵͳÉϽ¨Á¢ÐéÄâ»ú£¬×Ô¼º¶¨Òå³öÀ´µÄÒ»Ì×ͳһµÄÊý¾Ý½á¹¹ºÍ²Ù×÷Ö¸Á°ÑͬһÌ×ÓïÑÔ·Òë¸ø¸÷´óÖ÷Á÷µÄ²Ù×÷ϵͳ£¬ÊµÏÖÁË¿çÆ½Ì¨ÔËÐУ¬¿ÉÒÔ˵JVMÊÇjavaµÄºËÐÄ£¬ÊÇjava¿ÉÒÔÒ»´Î±àÒëµ½´¦ÔËÐеı¾ÖÊËùÔÚ¡£
Ò»¡¢JVMµÄ×é³ÉºÍÔËÐÐÔÀí¡£
JVMµÄ±Ï¾¹ÊǸöÐéÄâ»ú£¬ÊÇÒ»Öֹ淶£¬Ëä˵·ûºÏ·ëŵÒÀÂüµÄ¼ÆËã»úÉè¼ÆÀíÄµ«ÊÇËû²¢²»ÊÇʵÌ弯Ëã»ú£¬ËùÒÔËûµÄ×é³ÉÒ²²»ÊÇʲô´æ´¢Æ÷£¬¿ØÖÆÆ÷£¬ÔËËãÆ÷£¬ÊäÈëÊä³öÉ豸¡£ÔÚÎÒ¿´À´£¬JVM·ÅÔÚÔËÐÐÔÚÕæÊµµÄ²Ù×÷ϵͳÖбíÏֵĸüÏñÓ¦ÓûòÕß˵Êǽø³Ì£¬ËûµÄ×é³É¿ÉÒÔÀí½âΪJVMÕâ¸ö½ø³ÌÓÐÄÄЩ¹¦ÄÜÄ£¿é£¬¶øÕâЩ¹¦ÄÜÄ£¿éµÄÔË×÷¿ÉÒÔ¿´×öÊÇJVMµÄÔËÐÐÔÀí¡£JVMÓжàÖÖʵÏÖ£¬ÀýÈçOracleµÄJVM£¬HPµÄJVMºÍIBMµÄJVMµÈ£¬¶øÔÚ±¾ÎÄÖÐÑо¿Ñ§Ï°µÄÔòÊÇʹÓÃ×î¹ã·ºµÄOracleµÄHotSpot
JVM¡£
1.JVMÔÚJDKÖеÄλÖá£
JDKÊÇjava¿ª·¢µÄ±Ø±¸¹¤¾ßÏ䣬JDKÆäÖÐÓÐÒ»²¿·ÖÊÇJRE£¬JREÊÇJAVAÔËÐл·¾³£¬JVMÔòÊÇJRE×îºËÐĵIJ¿·Ö¡£ÎÒ´Óoracle.com½ØÈ¡ÁËÒ»ÕŹØÓÚJDK
Standard EdtionµÄ×é³Éͼ£¬

´Ó×îµ×²ãµÄλÖÿÉÒÔ¿´³öÀ´JVMÓжàÖØÒª£¬¶øÊµ¼ÊÏîÄ¿ÖÐJAVAÓ¦ÓõÄÐÔÄÜÓÅ»¯£¬OOMµÈÒì³£µÄ´¦Àí×îÖÕ¶¼µÃ´ÓJVMÕâ¶ùÀ´½â¾ö¡£HotSpotÊÇOracle¹ØÓÚJVMµÄÉÌ±ê£¬Çø±ðÓÚIBM£¬HPµÈ³§ÉÌ¿ª·¢µÄJVM¡£Java
HotSpot Client VMºÍJava HotSpot Server VMÊÇJDK¹ØÓÚJVMµÄÁ½ÖÖ²»Í¬µÄʵÏÖ£¬Ç°Õß¿ÉÒÔ¼õÉÙÆô¶¯Ê±¼äºÍÄÚ´æÕ¼Ó㬶øºóÕßÔòÌṩ¸ü¼ÓÓÅÐãµÄ³ÌÐòÔËÐÐËÙ¶È£¨²Î¿¼×Ô£ºhttp://docs.oracle.com/
javase/8/docs/technotes/ guides/vm/index.html £¬¸ÃÎĵµÓйØÓÚ¸÷¸ö°æ±¾µÄJVMµÄ½éÉÜ£©¡£ÔÚÃüÁîÐУ¬Í¨¹ýjava
-version¿ÉÒԲ鿴¹ØÓÚµ±Ç°»úÆ÷JVMµÄÐÅÏ¢£¬ÏÂÃæÊÇÎÒÔÚWin8ϵͳÉÏÖ´ÐÐÃüÁîµÄ½ØÍ¼£¬

¿ÉÒÔ¿´³öÎÒ×°µÄÊÇbuild 20.13-b02°æ±¾£¬HotSpot ÀàÐÍServerģʽµÄJVM¡£
2.JVMµÄ×é³É
JVMÓÉ4´ó²¿·Ö×é³É£ºClassLoader£¬Runtime Data
Area£¬ Execution Engine£¬Native Interface¡£
ÎÒ´ÓCSDNÕÒÁËÒ»ÕÅÃèÊöJVM´óÖ½ṹµÄͼ£º

2.1.ClassLoaderÊǸºÔð¼ÓÔØclassÎļþ£¬classÎļþÔÚÎļþ¿ªÍ·ÓÐÌØ¶¨µÄÎļþ±êʾ£¬²¢ÇÒClassLoaderÖ»¸ºÔðclassÎļþµÄ¼ÓÔØ£¬ÖÁÓÚËüÊÇ·ñ¿ÉÒÔÔËÐУ¬ÔòÓÉExecution
Engine¾ö¶¨¡£
2.2.Native InterfaceÊǸºÔðµ÷Óñ¾µØ½Ó¿ÚµÄ¡£ËûµÄ×÷ÓÃÊǵ÷Óò»Í¬ÓïÑԵĽӿڸøJAVAÓã¬Ëû»áÔÚNative
Method StackÖмǼ¶ÔÓ¦µÄ±¾µØ·½·¨£¬È»ºóµ÷Óø÷½·¨Ê±¾Íͨ¹ýExecution Engine¼ÓÔØ¶ÔÓ¦µÄ±¾µØlib¡£Ô±¾¶àÓÚÓÃһЩרҵÁìÓò£¬ÈçJAVAÇý¶¯£¬µØÍ¼ÖÆ×÷ÒýÇæµÈ£¬ÏÖÔÚ¹ØÓÚÕâÖÖ±¾µØ·½·¨½Ó¿ÚµÄµ÷ÓÃÒѾ±»ÀàËÆÓÚSocketͨÐÅ£¬WebServiceµÈ·½Ê½È¡´ú¡£
2.3.Execution EngineÊÇÖ´ÐÐÒýÇæ£¬Ò²½ÐInterpreter¡£ClassÎļþ±»¼ÓÔØºó£¬»á°ÑÖ¸ÁîºÍÊý¾ÝÐÅÏ¢·ÅÈëÄÚ´æÖУ¬Execution
EngineÔò¸ºÔð°ÑÕâЩÃüÁî½âÊ͸ø²Ù×÷ϵͳ¡£
2.4.Runtime Data AreaÔòÊÇ´æ·ÅÊý¾ÝµÄ£¬·ÖΪÎ岿·Ö£ºStack£¬Heap£¬Method
Area£¬PC Register£¬Native Method Stack¡£¼¸ºõËùÓеĹØÓÚjavaÄÚ´æ·½ÃæµÄÎÊÌ⣬¶¼ÊǼ¯ÖÐÔÚÕâ¿é¡£ÏÂͼÊÇjavapapers.comÉϹØÓÚRun-time
Data AreasµÄÃèÊö£º

¿ÉÒÔ¿´³öËü°ÑMethod Area»¯ÎªÁËHeapµÄÒ»²¿·Ö£¬javapapers.comÖÐÈÏΪMethod
AreaÊÇHeapµÄÂß¼ÇøÓò£¬µ«ÕâÈ¡¾öÓÚJVMµÄʵÏÖÕߣ¬¶øHotSpot JVMÖаÑMethod Area»®·ÖΪ·Ç¶ÑÄڴ棬ÏÔÈ»ÊDz»°üº¬ÔÚHeapÖеġ£ÏÂͼÊÇjavacodegeeks.comÖУ¬2014Äê9Ô¿¯³öµÄһƬ²©ÎÄÖйØÓÚRuntime
Data AreaµÄ»®·Ö£¬ÆäÖÐÖ¸³ö£¬NonHeap°üº¬PermGenºÍCode Cache£¬PermGen°üº¬Method
Area,¶øÇÒPermGenÔÚJAVA SE 8ÖÐÒѾ²»ÔÙÓÃÁË¡£²éÔÄ×ÊÁÏ£¨https://abhirockzz.wordpress.com/
2014/ 03/18/ java-se-8-is -knocking-are-you-there/£©µÃÖª£¬java8ÖÐPermGenÒѾ´ÓJVMÖÐÒÆ³ý²¢±»MetaSpaceÈ¡´ú£¬java8ÖÐÒ²²»»á¼ûµ½OOM:PermGen
SpaceµÄÒì³£¡£Ä¿Ç°Runtime Data Area¿ÉÒÔÓÃÏÂͼÃèÊöËüµÄ×é³É£º

2.4.1.StackÊÇjavaÕ»Äڴ棬ËüµÈ¼ÛÓÚCÓïÑÔÖеÄÕ»£¬Õ»µÄÄÚ´æµØÖ·ÊDz»Á¬ÐøµÄ£¬Ã¿¸öÏ̶߳¼ÓµÓÐ×Ô¼ºµÄÕ»¡£Õ»ÀïÃæ´æ´¢×ŵÄÊÇStackFrame£¬ÔÚ¡¶JVM
Specification¡·ÖÐÎİæÖб»Òë×÷javaÐéÄâ»ú¿ò¼Ü£¬Ò²½Ð×öÕ»Ö¡¡£StackFrame°üº¬ÈýÀàÐÅÏ¢£º¾Ö²¿±äÁ¿£¬Ö´Ðл·¾³£¬²Ù×÷ÊýÕ»¡£¾Ö²¿±äÁ¿ÓÃÀ´´æ´¢Ò»¸öÀàµÄ·½·¨ÖÐËùÓõ½µÄ¾Ö²¿±äÁ¿¡£Ö´Ðл·¾³ÓÃÓÚ±£´æ½âÎöÆ÷¶ÔÓÚjava×Ö½ÚÂë½øÐнâÊ͹ý³ÌÖÐÐèÒªµÄÐÅÏ¢£¬°üÀ¨£ºÉϴε÷Óõķ½·¨¡¢¾Ö²¿±äÁ¿Ö¸ÕëºÍ²Ù×÷ÊýÕ»µÄÕ»¶¥ºÍÕ»µ×Ö¸Õë¡£²Ù×÷ÊýÕ»ÓÃÓÚ´æ´¢ÔËËãËùÐèÒªµÄ²Ù×÷ÊýºÍ½á¹û¡£StackFrameÔÚ·½·¨±»µ÷ÓÃʱ´´½¨£¬ÔÚij¸öÏß³ÌÖУ¬Ä³¸öʱ¼äµãÉÏ£¬Ö»ÓÐÒ»¸ö¿ò¼ÜÊÇ»îÔ¾µÄ£¬¸Ã¿ò¼Ü±»³ÆÎªCurrent
Frame£¬¶ø¿ò¼ÜÖеķ½·¨±»³ÆÎªCurrent Method£¬ÆäÖж¨ÒåµÄÀàΪCurrent Class¡£¾Ö²¿±äÁ¿ºÍ²Ù×÷ÊýÕ»ÉϵIJÙ×÷×ÜÊÇÒýÓõ±Ç°¿ò¼Ü¡£µ±Stack
FrameÖз½·¨±»Ö´ÐÐÍêÖ®ºó£¬»òÕßµ÷ÓñðµÄStackFrameÖеķ½·¨Ê±£¬Ôòµ±Ç°Õ»±äΪÁíÍâÒ»¸öStackFrame¡£StackµÄ´óСÊÇÓÉÁ½ÖÖÀàÐÍ£¬¹Ì¶¨ºÍ¶¯Ì¬µÄ£¬¶¯Ì¬ÀàÐ͵ÄÕ»¿ÉÒÔ°´ÕÕÏ̵߳ÄÐèÒª·ÖÅä¡£
ÏÂÃæÁ½ÕÅͼÊǹØÓÚÕ»Ö®¼ä¹ØÏµÒÔ¼°Õ»ºÍ·Ç¶ÑÄÚ´æµÄ¹ØÏµ»ù±¾ÃèÊö£¨À´×Ôhttp://www.programering.com/
a/MzM3QzNwATA.html£©£º


2.4.2.HeapÊÇÓÃÀ´´æ·Å¶ÔÏóÐÅÏ¢µÄ£¬ºÍStack²»Í¬£¬Stack´ú±í×ÅÒ»ÖÖÔËÐÐʱµÄ״̬¡£»»¾ä»°Ëµ£¬Õ»ÊÇÔËÐÐʱµ¥Î»£¬½â¾ö³ÌÐò¸ÃÈçºÎÖ´ÐеÄÎÊÌ⣬¶ø¶ÑÊÇ´æ´¢µÄµ¥Î»£¬½â¾öÊý¾Ý´æ´¢µÄÎÊÌâ¡£HeapÊǰéËæ×ÅJVMµÄÆô¶¯¶ø´´½¨£¬¸ºÔð´æ´¢ËùÓжÔÏóʵÀýºÍÊý×éµÄ¡£¶ÑµÄ´æ´¢¿Õ¼äºÍÕ»Ò»ÑùÊDz»ÐèÒªÁ¬ÐøµÄ£¬Ëü·ÖΪYoung
GenerationºÍOld Generation£¨Ò²½ÐTenured Generation£©Á½´ó²¿·Ö¡£Young
Generation·ÖΪEdenºÍSurvivor£¬SurvivorÓÖ·ÖΪFrom SpaceºÍ ToSpace¡£
ºÍHeap¾³£Ò»ÆðÌá¼°µÄ¸ÅÄîÊÇPermanentSpace£¬ËüÊÇÓÃÀ´¼ÓÔØÀà¶ÔÏóµÄרÃŵÄÄÚ´æÇø£¬ÊǷǶÑÄڴ棬ºÍHeapÒ»Æð×é³ÉJAVAÄڴ棬Ëü°üº¬MethodAreaÇø£¨ÔÚûÓÐCodeCacheµÄHotSpotJVMʵÏÖÀÔòMethodArea¾ÍÏ൱ÓÚGenerationSpace£©¡£ÔÚJVM³õʼ»¯µÄʱºò£¬ÎÒÃÇ¿ÉÒÔͨ¹ý²ÎÊýÀ´·Ö±ðÖ¸¶¨£¬PermanentSpaceµÄ´óС¡¢¶ÑµÄ´óС¡¢ÒÔ¼°Young
GenerationºÍOld GenerationµÄ±ÈÖµ¡¢EdenÇøºÍFrom SpaceµÄ±ÈÖµ£¬´Ó¶øÀ´Ï¸Á£¶ÈµÄÊÊÓ¦²»Í¬JAVAÓ¦ÓõÄÄÚ´æÐèÇó¡£
2.4.3.PC RegisterÊdzÌÐò¼ÆÊý¼Ä´æÆ÷£¬Ã¿¸öJAVAÏ̶߳¼ÓÐÒ»¸öµ¥¶ÀµÄPC Register£¬ËûÊÇÒ»¸öÖ¸Õ룬ÓÉExecution
Engine¶ÁÈ¡ÏÂÒ»ÌõÖ¸Áî¡£Èç¹û¸ÃÏß³ÌÕýÔÚÖ´ÐÐjava·½·¨£¬ÔòPC Register´æ´¢µÄÊÇ ÕýÔÚ±»Ö´ÐеÄÖ¸ÁîµÄµØÖ·£¬Èç¹ûÊDZ¾µØ·½·¨£¬PC
RegisterµÄֵûÓж¨Òå¡£PC¼Ä´æÆ÷·Ç³£Ð¡£¬Ö»Õ¼ÓÃÒ»¸ö×Ö¿í£¬¿ÉÒÔ³ÖÓÐÒ»¸öreturnAdress»òÕßÌØ¶¨Æ½Ì¨µÄÒ»¸öÖ¸Õë¡£
2.4.4.Method AreaÔÚHotSpot JVMµÄʵÏÖÖÐÊôÓڷǶÑÇø£¬·Ç¶ÑÇø°üÀ¨Á½²¿·Ö£ºPermanet
GenerationºÍCode Cache£¬¶øMethod AreaÊôÓÚPermanert GenerationµÄÒ»²¿·Ö¡£Permanent
GenerationÓÃÀ´´æ´¢ÀàÐÅÏ¢£¬±ÈÈç˵£ºclass definitions£¬structures£¬methods£¬
field£¬ method (data and code) ºÍ constants¡£Code CacheÓÃÀ´´æ´¢Compiled
Code£¬¼´±àÒëºÃµÄ±¾µØ´úÂ룬ÔÚHotSpot JVMÖÐͨ¹ýJIT(Just In Time) CompilerÉú³É£¬JITÊǼ´Ê±±àÒëÆ÷£¬ËûÊÇΪÁËÌá¸ßÖ¸ÁîµÄÖ´ÐÐЧÂÊ£¬°Ñ×Ö½ÚÂëÎļþ±àÒë³É±¾µØ»úÆ÷´úÂ룬ÈçÏÂͼ£º

ÒýÓÃÒ»¸ö¾µäµÄ°¸ÀýÀ´Àí½âStack£¬HeapºÍMethod AreaµÄ»®·Ö£¬¾ÍÊÇSring
a="xx"£» Stirng b="xx"£¬ÎÊÊÇ·ña==b?
Ê×ÏÈ==·ûºÅÊÇÓÃÀ´ÅжÏÁ½¸ö¶ÔÏóµÄÒýÓõØÖ·ÊÇ·ñÏàͬ£¬¶øÔÚÉÏÃæµÄÌâÄ¿ÖУ¬aºÍb°´ÀíÀ´ËµÉêÇëµÄÊÇStackÖв»Í¬µÄµØÖ·£¬µ«ÊÇËûÃÇÖ¸ÏòMethod
AreaÖÐRuntime Constant PoolµÄͬһ¸öµØÖ·£¬°´ÕÕÍøÉϵĽâÊÍ£¬ÔÚa¸³ÖµÎª¡°xx¡±Ê±£¬»áÔÚRuntime
Contant PoolÖÐÉú³ÉÒ»¸öString Constant£¬µ±bÒ²¸³ÖµÎª¡°xx¡±Ê±£¬ÄÇô»áÔÚ³£Á¿³ØÖв鿴ÊÇ·ñ´æÔÚֵΪ¡°xx¡±µÄ³£Á¿£¬´æÔڵϰ£¬Ôò°ÑbµÄÖ¸ÕëÒ²Ö¸Ïò¡°xx¡±µÄµØÖ·£¬¶ø²»ÊÇÐÂÉú³ÉÒ»¸öString
Constant¡£ÎÒ²éÔÄÁËÍøÂçÉÏ´ó¼Ò¹ØÓÚString ConstantµÄ´æ´¢µÄ˵˵·¨£¬´æÔÚÂÔ΢²î±ðµÄÊÇ£¬Ëü´æ´¢ÔÚÄÄÀÓÐÈË˵HeapÖлá·ÖÅä³öÒ»¸ö³£Á¿³Ø£¬ÓÃÀ´´æ´¢³£Á¿£¬ËùÓÐÏ̹߳²ÏíËü¡£¶øÓÐÈË˵³£Á¿³ØÊÇMethod
AreaµÄÒ»²¿·Ö£¬¶øMethod AreaÊôÓڷǶÑÄڴ棬ÄÇÔõôÄÜ˵³£Á¿³Ø´æÔÚÓÚ¶ÑÖУ¿
ÎÒÈÏΪ£¬ÆäʵÁ½ÖÖÀí½â¶¼Ã»´í¡£Method AreaµÄÈ·´ÓÂß¼ÉϽ²¿ÉÒÔÊÇHeapµÄÒ»²¿·Ö£¬ÔÚijЩJVMʵÏÖÀï´Ó¶ÑÉÏ¿ª±ÙÒ»¿é´æ´¢¿Õ¼äÀ´¼Ç¼³£Á¿ÊÇ·ûºÏJVM³£Á¿³ØÉè¼ÆÄ¿µÄµÄ£¬ËùÒÔǰһÖÖ˵·¨Ã»ÎÊÌâ¡£¶ÔÓÚºóÒ»ÖÖ˵·¨£¬HotSpot
JVMµÄʵÏÖÖеÄÈ·Êǰѷ½·¨Çø»®·ÖΪÁ˷ǶÑÄڴ棬Òâ˼¾ÍÊÇËü²»ÔÚ¶ÑÉÏ¡£ÎÒÔÚHotSpot JVM×öÁ˸ö¼òµ¥µÄʵÑ飬¶¨Òå¶à¸ö³£Á¿Ö®ºó£¬³ÌÐòÅ׳öOOM£ºPermGen
SpaceÒì³££¬Ó¡Ö¤ÁËJVMʵÏÖÖг£Á¿³ØÊÇÔÚPermanent SpaceÖеÄ˵·¨¡£µ«ÊÇ£¬ÎÒµÄJDK°æ±¾ÊÇ1.6µÄ¡£²éÔÄ×ÊÁÏ£¬JDK1.7ÖÐInternedStringsÒѾ²»ÔÙ´æ´¢ÔÚPermanentSpaceÖУ¬¶øÊǷŵ½ÁËHeapÖУ»JDK8ÖÐPermanentSpaceÒѾ±»ÍêÈ«ÒÆ³ý£¬InternedStringsÒ²±»·Åµ½ÁËMetaSpaceÖУ¨Èç¹û³öÏÖÄÚ´æÒç³ö£¬»á±¨OOM:MetaSpace£¬ÕâÀïÓиö¹ØÓÚÁ½ÕßÐÔÄܶԱȵÄÎÄÕ£ºhttp://blog.csdn.net/zhyhang
/article/details/17246223£©¡£ËùÒÔ£¬ÈÊÕß¼ûÈÊ£¬ÖÇÕß¼ûÖÇ£¬Ò»¸öÂøÍ·×ãÒÔÒý·¢Ñª°¸£¬¾ÍËãÊÇͬһ¸öÉ̼ҵÄJVM£¬±Ï¾¹JDK°æ±¾ÔÚ¸üУ¬»òÐíÕýÈçStackOverFlowÉÏ´óÉñÃÇËù˵£¬¶ÔÓÚÀí½âJVM
Runtime Data AreaÕâÒ»²¿·ÖµÄ»®·ÖÂß¼£¬»¹ÊÇÈ¥¿´¶ÔÓ¦°æ±¾µÄJDKÔ´Âë±È½Ï¿¿Æ×£¬»òÕßÊDzο¼²»Í¬µÄ°æ±¾JVM
Specification£¨http://docs.oracle.com /javase/specs/£©¡£
2.4.5.Native Method StackÊǹ©±¾µØ·½·¨£¨·Çjava£©Ê¹ÓõÄÕ»¡£Ã¿¸öÏ̳߳ÖÓÐÒ»¸öNative
Method Stack¡£
3.JVMµÄÔËÐÐÔÀí¼ò½é
Java³ÌÐò±»javac¹¤¾ß±àÒëΪ.class×Ö½ÚÂëÎļþÖ®ºó£¬ÎÒÃÇÖ´ÐÐjavaÃüÁ¸ÃclassÎļþ±ã±»JVMµÄClass
Loader¼ÓÔØ£¬¿ÉÒÔ¿´³öJVMµÄÆô¶¯ÊÇͨ¹ýJAVA PathϵÄjava.exe»òÕßjava½øÐеġ£JVMµÄ³õʼ»¯¡¢ÔËÐе½½áÊø´ó¸Å°üÀ¨Õâô¼¸²½£º
µ÷ÓòÙ×÷ϵͳAPIÅжÏϵͳµÄCPU¼Ü¹¹£¬¸ù¾Ý¶ÔÓ¦CPUÀàÐÍѰÕÒλÓÚJREĿ¼ÏµÄ/lib/jvm.cfgÎļþ£¬È»ºóͨ¹ý¸ÃÅäÖÃÎļþÕÒµ½¶ÔÓ¦µÄjvm.dllÎļþ£¨Èç¹ûÎÒÃDzÎÊýÖÐÓÐ-server»òÕß-client£¬
Ôò¼ÓÔØ¶ÔÓ¦²ÎÊýËùÖ¸¶¨µÄjvm.dll£¬Æô¶¯Ö¸¶¨ÀàÐ͵ÄJVM£©£¬³õʼ»¯jvm.dll²¢ÇÒ¹Ò½Óµ½JNIENV½á¹¹µÄʵÀýÉÏ£¬Ö®ºó¾Í¿ÉÒÔͨ¹ýJNIENVʵÀý×°ÔØ²¢ÇÒ´¦ÀíclassÎļþÁË¡£classÎļþÊÇ×Ö½ÚÂëÎļþ£¬Ëü°´ÕÕJVMµÄ¹æ·¶£¬¶¨ÒåÁ˱äÁ¿£¬·½·¨µÈµÄÏêϸÐÅÏ¢£¬JVM¹ÜÀí²¢ÇÒ·ÖÅä¶ÔÓ¦µÄÄÚ´æÀ´Ö´ÐгÌÐò£¬Í¬Ê±¹ÜÀíÀ¬»ø»ØÊÕ¡£Ö±µ½³ÌÐò½áÊø£¬Ò»ÖÖÇé¿öÊÇJVMµÄËùÓзÇÊØ»¤Ïß³ÌÍ£Ö¹£¬Ò»ÖÖÇé¿öÊdzÌÐòµ÷ÓÃSystem.exit()£¬JVMµÄÉúÃüÖÜÆÚÒ²½áÊø¡£
¹ØÓÚJVMÈçºÎ¹ÜÀí·ÖÅäÄڴ棬ÎÒͨ¹ýclassÎļþºÍÀ¬»ø»ØÊÕÁ½²¿·Ö½øÐÐÁËѧϰ¡£
¶þ¡¢JVMµÄÄÚ´æ¹ÜÀíºÍÀ¬»ø»ØÊÕ
JVMÖеÄÄÚ´æ¹ÜÀíÖ÷ÒªÊÇÖ¸JVM¶ÔÓÚHeapµÄ¹ÜÀí£¬ÕâÊÇÒòΪStack£¬PC RegisterºÍNative
Method Stack¶¼ÊǺÍÏß³ÌÒ»ÑùµÄÉúÃüÖÜÆÚ£¬ÔÚÏ߳̽áÊøÊ±×ÔÈ»¿ÉÒÔ±»ÔÙ´ÎʹÓá£ËäȻ˵£¬StackµÄ¹ÜÀí²»ÊÇÖØµã£¬µ«ÊÇÒ²²»ÊÇÍêÈ«²»½²¾¿µÄ¡£
1.Õ»µÄ¹ÜÀí
JVMÔÊÐíÕ»µÄ´óСÊǹ̶¨µÄ»òÕßÊǶ¯Ì¬±ä»¯µÄ¡£ÔÚOracleµÄ¹ØÓÚ²ÎÊýÉèÖõĹٷ½ÎĵµÖÐÓйØÓÚStackµÄÉèÖã¨http://docs.oracle.com/cd/E13150_01/
jrockit_jvm/jrockit/jrdocs / refman/optionX.html#wp1024112£©£¬ÊÇͨ¹ý-XssÀ´ÉèÖÃÆä´óС¡£¹ØÓÚStackµÄĬÈÏ´óС¶ÔÓÚ²»Í¬»úÆ÷Óв»Í¬µÄ´óС£¬²¢ÇÒ²»Í¬³§ÉÌ»òÕß°æ±¾ºÅµÄjvmµÄʵÏÖÆä´óСҲ²»Í¬£¬ÈçϱíÊÇHotSpotµÄĬÈÏ´óС£º

ÎÒÃÇÒ»°ãͨ¹ý¼õÉÙ³£Á¿£¬²ÎÊýµÄ¸öÊýÀ´¼õÉÙÕ»µÄÔö³¤£¬ÔÚ³ÌÐòÉè¼ÆÊ±£¬ÎÒÃǰÑһЩ³£Á¿¶¨Òåµ½Ò»¸ö¶ÔÏóÖУ¬È»ºóÀ´ÒýÓÃËûÃÇ¿ÉÒÔÌåÏÖÕâÒ»µã¡£ÁíÍ⣬ÉÙÓõݹéµ÷ÓÃÒ²¿ÉÒÔ¼õÉÙÕ»µÄÕ¼Óá£
Õ»ÊDz»ÐèÒªÀ¬»ø»ØÊյ쬾¡¹Ü˵À¬»ø»ØÊÕÊÇjavaÄÚ´æ¹ÜÀíµÄÒ»¸öºÜÈȵϰÌ⣬ջÖеĶÔÏóÈç¹ûÓÃÀ¬»ø»ØÊյĹ۵ãÀ´¿´£¬ËûÓÀÔ¶ÊÇlive״̬£¬ÊÇ¿ÉÒÔreachableµÄ£¬ËùÒÔÒ²²»ÐèÒª»ØÊÕ£¬ËûÕ¼ÓеĿռäËæ×ÅThreadµÄ½áÊø¶øÊÍ·Å¡££¨²Î¿¼×Ô£ºhttp://stackoverflow.com/
questions/20030120/java -default-stack-size£©
¹ØÓÚÕ»Ò»°ã»á·¢ÉúÒÔÏÂÁ½ÖÖÒì³££º
1.µ±Ïß³ÌÖеļÆËãËùÐèÒªµÄÕ»³¬¹ýËùÔÊÐí´óСʱ£¬»áÅ׳öStackOverflowError¡£
2.µ±JavaÕ»ÊÔͼÀ©Õ¹Ê±£¬Ã»ÓÐ×ã¹»µÄ´æ´¢Æ÷À´ÊµÏÖÀ©Õ¹£¬JVM»á±¨OutOfMemoryError¡£
ÎÒÕë¶ÔÕ»½øÐÐÁËʵÑ飬ÓÉÓڵݹéµÄµ÷ÓÿÉÒÔÖÂʹջµÄÒýÓÃÔö¼Ó£¬µ¼ÖÂÒç³ö£¬ËùÒÔÉè¼Æ´úÂëÈçÏ£º

ÎҵĻúÆ÷ÊÇx86_64ϵͳ£¬ËùÒÔStackµÄĬÈÏ´óСÊÇ128KB£¬ÉÏÊö³ÌÐòÔÚÔËÐÐʱ»á±¨´í£º

¶øµ±ÎÒÔÚeclipseÖе÷ÕûÁË-Xss²ÎÊýµ½3MÖ®ºó£¬¸ÃÒì³£Ïûʧ¡£

ÁíÍâÕ»ÉÏÓÐÒ»µãµÃ×¢ÒâµÄÊÇ£¬¶ÔÓÚ±¾µØ´úÂëµ÷Ó㬿ÉÄÜ»áÔÚÕ»ÖÐÉêÇëÄڴ棬±ÈÈçCµ÷ÓÃmalloc()£¬¶øÕâÖÖÇé¿öÏ£¬GCÊǹܲ»×ŵģ¬ÐèÒªÎÒÃÇÔÚ³ÌÐòÖУ¬ÊÖ¶¯¹ÜÀíÕ»Äڴ棬ʹÓÃfree()·½·¨ÊÍ·ÅÄÚ´æ¡£
2.¶ÑµÄ¹ÜÀí
¶ÑµÄ¹ÜÀíÒª±ÈÕ»¹ÜÀí¸´ÔӵĶ࣬ÎÒͨ¹ý¶ÑµÄ¸÷²¿·ÖµÄ×÷Óá¢ÉèÖã¬ÒÔ¼°¸÷²¿·Ö¿ÉÄÜ·¢ÉúµÄÒì³££¬ÒÔ¼°ÈçºÎ±ÜÃâ¸÷²¿·ÖÒì³£½øÐÐÁËѧϰ¡£

ÉÏͼÊÇ HeapºÍPermanentSapceµÄ×éºÏͼ£¬ÆäÖÐEdenÇøÀïÃæ´æ×ÅÊÇÐÂÉúµÄ¶ÔÏó£¬From
SpaceºÍTo SpaceÖдæ·Å×ÅÊÇÿ´ÎÀ¬»ø»ØÊÕºó´æ»îÏÂÀ´µÄ¶ÔÏó £¬ËùÒÔÿ´ÎÀ¬»ø»ØÊÕºó£¬EdenÇø»á±»Çå¿Õ¡£´æ»îÏÂÀ´µÄ¶ÔÏóÏÈÊǷŵ½From
Space£¬µ±From SpaceÂúÁËÖ®ºóÒÆ¶¯µ½To Space¡£µ±To SpaceÂúÁËÖ®ºóÒÆ¶¯µ½Old
Space¡£SurvivorµÄÁ½¸öÇøÊǶԳƵģ¬Ã»ÏȺó¹ØÏµ£¬ËùÒÔͬһ¸öÇøÖпÉÄÜͬʱ´æÔÚ´ÓEden¸´ÖƹýÀ´
¶ÔÏ󣬺ʹÓǰһ¸öSurvivor¸´ÖƹýÀ´µÄ¶ÔÏ󣬶ø¸´ÖƵ½ÄêÀÏÇøµÄÖ»ÓдӵÚÒ»¸öSurvivor¸´ÖƹýÀ´µÄ¶ÔÏó¡£¶øÇÒ£¬SurvivorÇø×ÜÓÐÒ»¸öÊǿյġ£Í¬Ê±£¬¸ù¾Ý³ÌÐòÐèÒª£¬SurvivorÇøÊÇ¿ÉÒÔÅäÖÃΪ¶à¸öµÄ£¨¶àÓÚÁ½¸ö£©£¬ÕâÑù¿ÉÒÔÔö¼Ó¶ÔÏóÔÚÄêÇá´úÖеĴæÔÚʱ¼ä£¬¼õÉÙ±»·Åµ½ÄêÀÏ´úµÄ¿ÉÄÜ¡£
Old SpaceÖÐÔò´æ·ÅÉúÃüÖÜÆÚ±È½Ï³¤µÄ¶ÔÏ󣬶øÇÒÓÐЩ±È½Ï´óµÄÐÂÉú¶ÔÏóÒ²·ÅÔÚOld SpaceÖС£
¶ÑµÄ´óСͨ¹ý-XmsºÍ-XmxÀ´Ö¸¶¨×îСֵºÍ×î´óÖµ£¬Í¨¹ý-XmnÀ´Ö¸¶¨Young
GenerationµÄ´óС£¨Ò»Ð©Àϰ汾ҲÓÃ-XX:NewSizeÖ¸¶¨£©£¬ ¼´ÉÏͼÖеÄEden¼ÓFromSpaceºÍToSpaceµÄ×Ü´óС¡£È»ºóͨ¹ý-XX:NewRatioÀ´Ö¸¶¨EdenÇøµÄ´óС£¬ÔÚXmsºÍXmxÏàµÈµÄÇé¿öÏ£¬¸Ã²ÎÊý²»ÐèÒªÉèÖá£Í¨¹ý-XX£ºSurvivorRatioÀ´ÉèÖÃEdenºÍÒ»¸öSurvivorÇøµÄ±ÈÖµ¡££¨²Î¿¼×Ô²©ÎÄ£ºhttp://www.cnblogs.com/redcreen
/archive/ 2011/05/04/2037057.html£©
¶ÑÒì³£·ÖΪÁ½ÖÖ£¬Ò»ÖÖÊÇOut of Memory(OOM)£¬Ò»ÖÖÊÇMemory Leak(ML)¡£Memory
Leak×îÖÕ½«µ¼ÖÂOOM¡£Êµ¼ÊÓ¦ÓÃÖбíÏÖΪ£º´ÓConsole¿´£¬ÄÚ´æ¼à¿ØÇúÏßÒ»Ö±ÔÚ¶¥²¿£¬³ÌÐòÏìÓ¦Âý£¬´ÓÏ߳̿´£¬´ó²¿·ÖµÄÏß³ÌÔÚ½øÐÐGC£¬Õ¼ÓñȽ϶àµÄCPU£¬×îÖÕ³ÌÐòÒì³£ÖÕÖ¹£¬±¨OOM¡£OOM·¢ÉúµÄʱ¼ä²»¶¨£¬Óж̵ÄÒ»¸öСʱ£¬Ó㤵Ä10ÌìÒ»¸öÔµġ£¹ØÓÚÒì³£µÄ´¦Àí£¬È·¶¨OOM/MLÒì³£ºó£¬Ò»¶¨Òª×¢Òâ±£»¤ÏÖ³¡£¬¿ÉÒÔdump
heap£¬Èç¹ûûÓÐÏÖ³¡Ôò¿ªÆôGCFlagÊÕ¼¯À¬»ø»ØÊÕÈÕÖ¾£¬È»ºó½øÐзÖÎö£¬È·¶¨ÎÊÌâËùÔÚ¡£Èç¹ûÎÊÌâ²»ÊÇMLµÄ»°£¬Ò»°ãͨ¹ýÔö¼ÓHeap£¬Ôö¼ÓÎïÀíÄÚ´æÀ´½â¾öÎÊÌ⣬Êǵϰ£¬¾ÍÐ޸ijÌÐòÂß¼¡£
3.À¬»ø»ØÊÕ
JVMÖлáÔÚÒÔÏÂÇé¿ö´¥·¢»ØÊÕ£º¶ÔÏóûÓб»ÒýÓã¬×÷ÓÃÓò·¢Éúδ²¶×½Òì³££¬³ÌÐòÕý³£Ö´ÐÐÍê±Ï£¬³ÌÐòÖ´ÐÐÁËSystem.exit()£¬³ÌÐò·¢ÉúÒâÍâÖÕÖ¹¡£
JVMÖбê¼ÇÀ¬»øÊ¹ÓõÄËã·¨ÊÇÒ»ÖÖ¸ùËÑË÷Ëã·¨¡£¼òµ¥µÄ˵£¬¾ÍÊÇ´ÓÒ»¸ö½ÐGC RootsµÄ¶ÔÏó¿ªÊ¼£¬ÏòÏÂËÑË÷£¬Èç¹ûÒ»¸ö¶ÔÏó²»ÄÜ´ïµ½GC
Roots¶ÔÏóµÄʱºò£¬ËµÃ÷Ëü¿ÉÒÔ±»»ØÊÕÁË¡£ÕâÖÖËã·¨±ÈÒ»ÖÖ½Ð×öÒýÓüÆÊý·¨µÄÀ¬»ø±ê¼ÇËã·¨ÒªºÃ£¬ÒòΪËü±ÜÃâÁ˵±Á½¸ö¶ÔÏó°¡»¥ÏàÒýÓÃʱÎÞ·¨±»»ØÊÕµÄÏÖÏó¡£
JVMÖжÔÓÚ±»±ê¼ÇΪÀ¬»øµÄ¶ÔÏó½øÐлØÊÕʱÓÖ·ÖΪÁËÒ»ÏÂ3ÖÖËã·¨£º
1.±ê¼ÇÇå³ýËã·¨£¬¸ÃËã·¨ÊÇ´Ó¸ù¼¯ºÏɨÃèÕû¸ö¿Õ¼ä£¬±ê¼Ç´æ»îµÄ¶ÔÏó£¬È»ºóÔÚɨÃèÕû¸ö¿Õ¼ä¶ÔûÓб»±ê¼ÇµÄ¶ÔÏó½øÐлØÊÕ£¬ÕâÖÖËã·¨ÔÚ´æ»î¶ÔÏó½Ï¶àʱ±È½Ï¸ßЧ£¬µ«»á²úÉúÄÚ´æË鯬¡£
2.¸´ÖÆËã·¨£¬¸ÃËã·¨ÊÇ´Ó¸ù¼¯ºÏɨÃ裬²¢½«´æ»îµÄ¶ÔÏó¸´ÖƵ½ÐµĿռ䣬ÕâÖÖËã·¨ÔÚ´æ»î¶ÔÏóÉÙʱ±È½Ï¸ßЧ¡£
3.±ê¼ÇÕûÀíËã·¨£¬±ê¼ÇÕûÀíËã·¨ºÍ±ê¼ÇÇå³ýËã·¨Ò»Ñù¶¼»áɨÃè²¢±ê¼Ç´æ»î¶ÔÏó£¬ÔÚ»ØÊÕδ±ê¼Ç¶ÔÏóµÄͬʱ»áÕûÀí±»±ê¼ÇµÄ¶ÔÏ󣬽â¾öÁËÄÚ´æË鯬µÄÎÊÌâ¡£
JVMÖУ¬²»Í¬µÄ ÄÚ´æÇøÓò×÷ÓúÍÐÔÖʲ»Ò»Ñù£¬Ê¹ÓõÄÀ¬»ø»ØÊÕËã·¨Ò²²»Ò»Ñù£¬ËùÒÔJVMÖÐÓÖ¶¨ÒåÁ˼¸ÖÖ²»Í¬µÄÀ¬»ø»ØÊÕÆ÷£¨Í¼ÖÐÁ¬Ïß´ú±íÁ½¸ö»ØÊÕÆ÷¿ÉÒÔͬʱʹÓã©£º

1.Serial GC¡£´ÓÃû×ÖÉÏ¿´£¬´®ÐÐGCÒâζ×ÅÊÇÒ»ÖÖµ¥Ï̵߳ģ¬ËùÒÔËüÒªÇóÊÕ¼¯µÄʱºòËùÓеÄÏß³ÌÔÝÍ£¡£Õâ¶ÔÓÚ¸ßÐÔÄܵÄÓ¦ÓÃÊDz»ºÏÀíµÄ£¬ËùÒÔ´®ÐÐGCÒ»°ãÓÃÓÚClientģʽµÄJVMÖС£
2.ParNew GC¡£ÊÇÔÚSerialGCµÄ»ù´¡ÉÏ£¬Ôö¼ÓÁ˶àÏ̻߳úÖÆ¡£µ«ÊÇÈç¹û»úÆ÷Êǵ¥CPUµÄ£¬ÕâÖÖÊÕ¼¯Æ÷ÊDZÈSerialGCЧÂʵ͵ġ£
3.Parrallel Scavenge GC¡£ÕâÖÖÊÕ¼¯Æ÷ÓÖ½ÐÍÌÍÂÁ¿ÓÅÏÈÊÕ¼¯Æ÷£¬¶øÍÌÍÂÁ¿=³ÌÐòÔËÐÐʱ¼ä/(JVMÖ´ÐлØÊÕµÄʱ¼ä+³ÌÐòÔËÐÐʱ¼ä),¼ÙÉè³ÌÐòÔËÐÐÁË100·ÖÖÓ£¬JVMµÄÀ¬»ø»ØÊÕÕ¼ÓÃ1·ÖÖÓ£¬ÄÇôÍÌÍÂÁ¿¾ÍÊÇ99%¡£Parallel
Scavenge GCÓÉÓÚ¿ÉÒÔÌṩ±È½Ï²»´íµÄÍÌÍÂÁ¿£¬ËùÒÔ±»×÷ΪÁËserverģʽJVMµÄĬÈÏÅäÖá£
4.ParallelOldÊÇÀÏÉú´ú²¢ÐÐÊÕ¼¯Æ÷µÄÒ»ÖÖ£¬Ê¹ÓÃÁ˱ê¼ÇÕûÀíËã·¨£¬ÊÇJDK1.6ÖÐÒý½øµÄ£¬ÔÚ֮ǰÀÏÉú´úÖ»ÄÜʹÓô®ÐлØÊÕÊÕ¼¯Æ÷¡£
5.Serial OldÊÇÀÏÉú´úclientģʽϵÄĬÈÏÊÕ¼¯Æ÷£¬µ¥Ïß³ÌÖ´ÐУ¬Í¬Ê±Ò²×÷ΪCMSÊÕ¼¯Æ÷ʧ°ÜºóµÄ±¸ÓÃÊÕ¼¯Æ÷¡£
6.CMSÓÖ³ÆÏìӦʱ¼äÓÅÏÈ»ØÊÕÆ÷£¬Ê¹Óñê¼ÇÇå³ýËã·¨¡£ËûµÄ»ØÊÕÏß³ÌÊýΪ(CPUºËÐÄÊý+3)/4£¬ËùÒÔµ±CPUºËÐÄÊýΪ2ʱ±È½Ï¸ßЧЩ¡£CMS·ÖΪ4¸ö¹ý³Ì£º³õʼ±ê¼Ç¡¢²¢·¢±ê¼Ç¡¢ÖØÐ±ê¼Ç¡¢²¢·¢Çå³ý¡£
7.GarbageFirst£¨G1£©¡£±È½ÏÌØÊâµÄÊÇG1»ØÊÕÆ÷¼È¿ÉÒÔ»ØÊÕYoung Generation£¬Ò²¿ÉÒÔ»ØÊÕTenured
Generation¡£ËüÊÇÔÚJDK6µÄij¸ö°æ±¾ÖвÅÒýÈëµÄ£¬ÐÔÄܱȽϸߣ¬Í¬Ê±×¢ÒâÁËÍÌÍÂÁ¿ºÍÏìӦʱ¼ä¡£
¶ÔÓÚÀ¬»øÊÕ¼¯Æ÷µÄ×éºÏʹÓÿÉÒÔͨ¹ýϱíÖеIJÎÊýÖ¸¶¨£º

£¨MarsYOungNote:ͼÖеÚÈý¸öд´íÁË¡£UseConeMarkSweepGC£©
ĬÈϵÄGCÖÖÀà¿ÉÒÔͨ¹ýjvm.cfg»òÕßͨ¹ýjmap dump³öheapÀ´²é¿´£¬Ò»°ãÎÒÃÇͨ¹ýjstat
-gcutil [pid] 1000¿ÉÒԲ鿴ÿÃëgcµÄ´óÌåÇé¿ö£¬»òÕß¿ÉÒÔÔÚÆô¶¯²ÎÊýÖмÓÈ룺-verbose:gc
-XX: +PrintGCTimeStamps -XX: +PrintGCDetails -Xloggc:./gc.logÀ´¼Ç¼GCÈÕÖ¾¡£
GCÖÐÓÐÒ»ÖÖÇé¿ö½Ð×öFull GC£¬ÒÔϼ¸ÖÖÇé¿ö»á´¥·¢Full GCÒ²½ÐMajorGC£º
1.Tenured Space¿Õ¼ä²»×ãÒÔ´´½¨´òµÄ¶ÔÏó»òÕßÊý×飬»áÖ´ÐÐFullGC£¬²¢ÇÒµ±FullGCÖ®ºó¿Õ¼äÈç¹û»¹²»¹»£¬ÄÇô»áOOM:java
heap space¡£
2.Permanet GenerationµÄ´óС²»×㣬´æ·ÅÁËÌ«¶àµÄÀàÐÅÏ¢£¬ÔÚ·ÇCMSÇé¿öÏ»ش¥·¢FullGC¡£Èç¹ûÖ®ºó¿Õ¼ä»¹²»¹»£¬»áOOM:PermGen
space¡£
3.CMS GCʱ³öÏÖpromotion failedºÍconcurrent mode failureʱ£¬Ò²»á´¥·¢FullGC¡£promotion
failedÊÇÔÚ½øÐÐMinor GCʱ£¬survivor space·Å²»Ï¡¢¶ÔÏóÖ»ÄÜ·ÅÈë¾ÉÉú´ú£¬¶ø´Ëʱ¾ÉÉú´úÒ²·Å²»ÏÂÔì³ÉµÄ£»concurrent
mode failureÊÇÔÚÖ´ÐÐCMS GCµÄ¹ý³ÌÖÐͬʱÓжÔÏóÒª·ÅÈë¾ÉÉú´ú£¬¶ø´Ëʱ¾ÉÉú´ú¿Õ¼ä²»×ãÔì³ÉµÄ¡£
4.ÅжÏMinorGCºó£¬Òª½úÉýµ½TenuredSpaceµÄ¶ÔÏó´óС´óÓÚTenuredSpaceµÄ´óС£¬Ò²»á´¥·¢FullGC¡£
¿ÉÒÔ¿´³ö£¬µ±FullGCƵ·±·¢Éúʱ£¬Ò»¶¨ÊÇÄÚ´æ³öÎÊÌâÁË¡£
Èý¡¢JVMµÄÊý¾Ý¸ñʽ¹æ·¶ºÍClassÎļþ
1.Êý¾ÝÀàÐ͹淶
ÒÀ¾Ý·ëŵÒÀÂüµÄ¼ÆËã»úÀíÂÛ£¬¼ÆËã»ú×îºó´¦ÀíµÄ¶¼ÊǶþ½øÖƵÄÊý£¬¶øJVMÊÇÔõô°ÑjavaÎļþ×îºóת»¯³ÉÁ˸÷¸öƽ̨¶¼¿ÉÒÔʶ±ðµÄ¶þ½øÖÆÄØ£¿JVM×Ô¼º¶¨ÒåÁËÒ»¸ö³éÏóµÄ´æ´¢Êý¾Ýµ¥Î»£¬½Ð×öWord¡£Ò»¸ö×Ö×ã¹»´óÒÔ³ÖÓÐbyte¡¢char¡¢short¡¢int¡¢float¡¢reference»òÕßreturnAdressµÄÒ»¸öÖµ£¬Á½¸ö×ÖÔò×ã¹»³ÖÓиü´óµÄÀàÐÍlong¡¢double¡£Ëüͨ³£ÊÇÖ÷»úƽ̨һ¸öÖ¸ÕëµÄ´óС£¬Èç32λµÄƽ̨ÉÏ£¬×ÖÊÇ32λ¡£
ͬʱJVMÖж¨ÒåÁËËüËùÖ§³ÖµÄ»ù±¾Êý¾ÝÀàÐÍ£¬°üÀ¨Á½²¿·Ö£ºÊýÖµÀàÐͺÍreturnAddressÀàÐÍ¡£ÊýÖµÀàÐÍ·ÖΪÕûÐκ͸¡µãÐÍ¡£
ÕûÐΣº

¸¡µã£º

returnAddressÀàÐ͵ÄÖµÊÇJavaÐéÄâ»úÖ¸ÁîµÄ²Ù×÷ÂëµÄÖ¸Õë¡£
¶Ô±ÈjavaµÄ»ù±¾Êý¾ÝÀàÐÍ£¬jvmµÄ¹æ·¶ÖÐûÓÐbooleanÀàÐÍ¡£ÕâÊÇÒòΪjvmÖжÑbooleanµÄ²Ù×÷ÊÇͨ¹ýintÀàÐÍÀ´½øÐд¦ÀíµÄ£¬¶øbooleanÊý×éÔòÊÇͨ¹ýbyteÊý×éÀ´½øÐд¦Àí¡£
ÖÁÓÚString£¬ÎÒÃÇÖªµÀËü´æ´¢ÔÚ³£Á¿³ØÖУ¬µ«Ëû²»ÊÇ»ù±¾Êý¾ÝÀàÐÍ£¬Ö®ËùÒÔ¿ÉÒÔ´æÔÚ³£Á¿³ØÖУ¬ÊÇÒòΪÕâÊÇJVMµÄÒ»Öֹ涨¡£Èç¹û²é¿´StringÔ´Â룬ÎÒÃǾͻᷢÏÖ£¬StringÆäʵ¾ÍÊÇÒ»¸ö»ùÓÚ»ù±¾Êý¾ÝÀàÐÍcharµÄÊý×é¡£Èçͼ£º

2.×Ö½ÚÂëÎļþ
ͨ¹ý×Ö½ÚÂëÎļþµÄ¸ñʽÎÒÃÇ¿ÉÒÔ¿´³öjvmÊÇÈçºÎ¹æ·¶Êý¾ÝÀàÐ͵ġ£ÏÂÃæÊÇClassFileµÄ½á¹¹£º

¹ØÓÚ¸÷¸ö×ֶε͍Ò壨²Î¿¼×ÔJVM Specification ºÍ
²©ÎÄ£ºhttp://www.cnblogs.com/ zhuYears /archive/2012/02/07 /2340347.html£©£¬
magic£º
ħÊý£¬Ä§ÊýµÄΨһ×÷ÓÃÊÇÈ·¶¨Õâ¸öÎļþÊÇ·ñΪһ¸öÄܱ»ÐéÄâ»úËù½ÓÊܵÄClassÎļþ¡£Ä§ÊýÖµ¹Ì¶¨Îª0xCAFEBABE£¬²»»á¸Ä±ä¡£
minor_version¡¢ major_version£º
·Ö±ðΪClassÎļþµÄ¸±°æ±¾ºÍÖ÷°æ±¾¡£ËüÃǹ²Í¬¹¹³ÉÁËClassÎļþµÄ¸ñʽ°æ±¾ºÅ¡£²»Í¬°æ±¾µÄÐéÄâ»úʵÏÖÖ§³ÖµÄClassÎļþ°æ±¾ºÅÒ²ÏàÓ¦²»Í¬£¬¸ß°æ±¾ºÅµÄÐéÄâ»ú¿ÉÒÔÖ§³ÖµÍ°æ±¾µÄClassÎļþ£¬·´Ö®Ôò²»³ÉÁ¢¡£
constant_pool_count£º
³£Á¿³Ø¼ÆÊýÆ÷£¬constant_pool_countµÄÖµµÈÓÚconstant_pool±íÖеijÉÔ±Êý¼Ó1¡£
constant_pool[]£º
³£Á¿³Ø£¬constant_poolÊÇÒ»ÖÖ±í½á¹¹£¬Ëü°üº¬ClassÎļþ½á¹¹¼°Æä×ӽṹÖÐÒýÓõÄËùÓÐ×Ö·û´®³£Á¿¡¢Àà»ò½Ó¿ÚÃû¡¢×Ö¶ÎÃûºÍÆäËü³£Á¿¡£³£Á¿³Ø²»Í¬ÓÚÆäËû£¬Ë÷Òý´Ó1¿ªÊ¼µ½constant_pool_count
-1¡£
access_flags£º
·ÃÎʱêÖ¾£¬access_flagsÊÇÒ»ÖÖÑÚÂë±êÖ¾£¬ÓÃÓÚ±íʾij¸öÀà»òÕ߽ӿڵķÃÎÊȨÏÞ¼°»ù´¡ÊôÐÔ¡£access_flagsµÄȡֵ·¶Î§ºÍÏàÓ¦º¬Òå¼ûÏÂ±í£º

this_class£º
ÀàË÷Òý£¬this_classµÄÖµ±ØÐëÊǶÔconstant_pool±íÖÐÏîÄ¿µÄÒ»¸öÓÐЧË÷ÒýÖµ¡£constant_pool±íÔÚÕâ¸öË÷Òý´¦µÄÏî±ØÐëΪCONSTANT_Class_infoÀàÐͳ£Á¿£¬±íʾÕâ¸öClassÎļþËù¶¨ÒåµÄÀà»ò½Ó¿Ú¡£
super_class£º
¸¸ÀàË÷Òý£¬¶ÔÓÚÀàÀ´Ëµ£¬super_classµÄÖµ±ØÐëΪ0»òÕßÊǶÔconstant_pool±íÖÐÏîÄ¿µÄÒ»¸öÓÐЧË÷ÒýÖµ¡£Èç¹ûËüµÄÖµ²»Îª0£¬ÄÇconstant_pool±íÔÚÕâ¸öË÷Òý´¦µÄÏî±ØÐëΪCONSTANT_Class_infoÀàÐͳ£Á¿£¬±íʾÕâ¸öClassÎļþËù¶¨ÒåµÄÀàµÄÖ±½Ó¸¸Àà¡£µ±È»£¬Èç¹ûij¸öÀàsuper_classµÄÖµÊÇ0£¬ÄÇôËü±Ø¶¨ÊÇjava.lang.ObjectÀ࣬ÒòΪֻÓÐËüÊÇûÓи¸ÀàµÄ¡£
interfaces_count£º
½Ó¿Ú¼ÆÊýÆ÷£¬interfaces_countµÄÖµ±íʾµ±Ç°Àà»ò½Ó¿ÚµÄÖ±½Ó¸¸½Ó¿ÚÊýÁ¿¡£
interfaces[]£º
½Ó¿Ú±í£¬interfaces[]Êý×éÖеÄÿ¸ö³ÉÔ±µÄÖµ±ØÐëÊÇÒ»¸ö¶Ôconstant_pool±íÖÐÏîÄ¿µÄÒ»¸öÓÐЧË÷ÒýÖµ£¬ËüµÄ³¤¶ÈΪinterfaces_count¡£Ã¿¸ö³ÉÔ±interfaces[i]
±ØÐëΪCONSTANT_Class_infoÀàÐͳ£Á¿¡£
fields_count£º
×ֶμÆÊýÆ÷£¬fields_countµÄÖµ±íʾµ±Ç°ClassÎļþfields[]Êý×éµÄ³ÉÔ±¸öÊý¡£
fields[]£º
×Ö¶Î±í£¬fields[]Êý×éÖеÄÿ¸ö³ÉÔ±¶¼±ØÐëÊÇÒ»¸öfields_info½á¹¹µÄÊý¾ÝÏÓÃÓÚ±íʾµ±Ç°Àà»ò½Ó¿ÚÖÐij¸ö×ֶεÄÍêÕûÃèÊö¡£
methods_count£º
·½·¨¼ÆÊýÆ÷£¬methods_countµÄÖµ±íʾµ±Ç°ClassÎļþmethods[]Êý×éµÄ³ÉÔ±¸öÊý¡£
methods[]£º
·½·¨±í£¬methods[]Êý×éÖеÄÿ¸ö³ÉÔ±¶¼±ØÐëÊÇÒ»¸ömethod_info½á¹¹µÄÊý¾ÝÏÓÃÓÚ±íʾµ±Ç°Àà»ò½Ó¿ÚÖÐij¸ö·½·¨µÄÍêÕûÃèÊö¡£
attributes_count£º
ÊôÐÔ¼ÆÊýÆ÷£¬attributes_countµÄÖµ±íʾµ±Ç°ClassÎļþattributes±íµÄ³ÉÔ±¸öÊý¡£
attributes[]£º
ÊôÐÔ±í£¬attributes±íµÄÿ¸öÏîµÄÖµ±ØÐëÊÇattribute_info½á¹¹¡£
ËÄ¡¢Ò»¸öjavaÀàµÄʵÀý·ÖÎö
ΪÁËÁ˽âJVMµÄÊý¾ÝÀàÐ͹淶ºÍÄÚ´æ·ÖÅäµÄ´óÌåÇé¿ö£¬ÎÒн¨ÁËMemeryTest.java£º

±àÒëΪMemeryTest.classºó£¬Í¨¹ýWinHex²é¿´¸ÃÎļþ£¬¶ÔÓ¦×Ö½ÚÂëÎļþ¸÷¸ö²¿·Ö²»Í¬µÄ¶¨Ò壬ÎÒÁ˽âÁËÏÂÃæ16½øÖÆÊýÖµµÄ¾ßÌ庬Ò壬¾¡¹Ü²»Çå³þClassLoaderµÄ¾ßÌåʵÏÖÂß¼£¬µ«ÊÇ¿ÉÒÔÏëÏóÕâÑùÒ»¸öÑϽ÷¸ñʽµÄÎļþ¸øJVM¶ÔÓÚÄÚ´æ¹ÜÀíºÍÖ´ÐгÌÐòÌṩÁ˶à´óµÄ°ïÖú¡£

ÔËÐгÌÐòºó£¬ÎÒÔÚwindows×ÊÔ´¹ÜÀíÆ÷ÖÐÕÒµ½¶ÔÓ¦µÄ½ø³ÌID.

²¢ÇÒÔÚ¿ØÖÆÌ¨Í¨¹ýjmap -heap 10016²é¿´¶ÑÄÚ´æµÄʹÓÃÇé¿ö£º

Êä³ö½á¹ûÖбíʾµ±Ç°java½ø³ÌÆô¶¯µÄJVMÊÇͨ¹ý4¸öÏ߳̽øÐÐParallel GC£¬¶ÑµÄ×îСFreeRatioÊÇ40%£¬¶ÑµÄ×î´óFreeRatioÊÇ70%£¬¶ÑµÄ´óСÊÇ4090M£¬Ð¶ÔÏóÕ¼ÓÃ1.5M£¬Young
Generation¿ÉÒÔÀ©Õ¹µ½×î´óÊÇ1363M£¬ Tenured GenerationµÄ´óСÊÇ254.5M£¬ÒÔ¼°NewRadioºÍSurvivorRadioÖУ¬ÏÂÃæ¸üÊǾßÌ司³öÁËĿǰYoung
GenerationÖÐ1.5MµÄ»®·ÖÇé¿ö£¬EdenÕ¼ÓÃ1.0M£¬Ê¹ÓÃÁË5.4%£¬SpaceÕ¼ÁË0.5M,ʹÓÃÁË93%£¬To
SpaceÕ¼ÁË0.5M,ʹÓÃÁË0%¡£
ÏÂÃæÎÒÃÇͨ¹ýjmap dump°ÑheapµÄÄÚÈÝ´òÓ¡´òÎļþÖУº

ʹÓÃEclipseµÄMAT²å¼þ´ò¿ª¶ÔÓ¦µÄÎļþ£º 
Ñ¡ÔñµÚÒ»ÏîÄÚ´æÐ¹Â¶·ÖÎö±¨¸æ´ò¿ªtest.binÎļþ£¬Õ¹Ê¾³öÀ´µÄÊÇMAT¹ØÓÚÄÚ´æ¿ÉÄÜй¶µÄ·ÖÎö¡£


´Ó½á¹ûÀ´¿´£¬ÓÐ3¸öµØ·½¿ÉÄÜ´æÔÚÄÚ´æÐ¹Â¶£¬ËûÃÇÕ¼¾ÝÁËHeapµÄ22.10%£¬13.78%£¬14.69%£¬Èç¹ûÄÚ´æÐ¹Â¶£¬ÕâÀïÒ»°ã»áÓÐÒ»¸ö±ÈÖµ·Ç³£¸ßµÄ¶ÔÏó¡£´ò¿ªµÚÒ»¸öProbem
Suspect£¬½á¹ûÈçÏ£º

ShallowHeapÊǶÔÏó±¾ÉíÕ¼ÓõĶѴóС£¬²»°üº¬ÒýÓã¬RetainedHeapÊǶÔÏóËù³ÖÓеÄShallowheapµÄ´óС£¬°üÀ¨×Ô¼ºShallowHeapºÍ¿ÉÒÔÒýÓõĶÔÏóµÄShallowHeap¡£À¬»ø»ØÊÕµÄʱºò£¬Èç¹ûÒ»¸ö¶ÔÏó²»ÔÙÒýÓú󱻻ØÊÕ£¬ÄÇôËûµÄRetainedHeapÊÇÄÜ»ØÊÕµÄÄÚ´æ×ܺ͡£Í¨¹ýÉÏͼ¿ÉÒÔ¿´³ö³ÌÐòÖв¢Ã»ÓÐʲôÄÚ´æÐ¹Â¶£¬¿ÉÒÔ·ÅÐÄÁË¡£Èç¹û»¹ÓÐʲô²»Ì«È·¶¨µÄ¶ÔÏó£¬Ôò¿ÉÒÔͨ¹ý¶à¸öʱ¼äµãµÄHeapDumpFileÀ´Ñо¿Ä³¸ö¶ÔÏóµÄ±ä»¯Çé¿ö¡£
Î塢С½á
ÒÔÉϱãÊÇÎÒ×î½ü¼¸Ìì¶ÔJVMÏà¹Ø×ÊÁϵÄÕûÀí£¬Ö÷ÒªÎ§ÈÆËûµÄ»ù±¾×é³ÉºÍÔËÐÐÔÀíµÈ£¬ÄÚ´æ¹ÜÀí£¬»ù±¾Êý¾ÝÀàÐͺÍ×Ö½ÚÂëÎļþ¡£JVMÊÇÒ»¸ö·Ç³£ÓÅÐãµÄJAVA³ÌÐò£¬Ò²ÊǸö²»´íµÄ¹æ·¶£¬Õâ´ÎÕûÀíѧϰÈÃÎÒ¶ÔËûÓÐÁ˸ü¼ÓÇåÎúµÄÈÏÖª£¬¶ÔJavaÓïÑÔµÄÀí½âÒ²¸ü¼Ó¼ÓÉî¡£
Õâ´Îѧϰ¹ý³Ì£¬¼á¶¨ÁËÎÒ¶Ô³ÌÐòÔ±·¢Õ¹µÄÈÏÖª¡£ÖªÊ¶Ò»¶¨Òª¾«£¬ÏÂÒ»²½ÎÒ½«±ß¹¤×÷±ß×ÐϸÔĶÁOracleµÄ3¸ö°æ±¾µÄ¡¶JVM
Specification¡·£¬²¢ÇÒ½áºÏʵ¼ùÈÃ×Ô¼ºµÄJava»ù´¡ËØÑø¸üÉÏÒ»¸ö²ã´Î¡£(http://docs.oracle.com/javase/specs/)
|