ä¸ï¼jvmå
ååºå
1ï¼ ç¨åºè®¡æ°å¨
ä¸åå¾å°çå
å空é´ï¼ä½ç¨æ¯å½å线ç¨ææ§è¡çåèç çè¡å·æ示å¨ã
2ï¼ javaæ
ä¸ç¨åºè®¡æ°å¨ä¸æ ·ï¼javaæ ï¼èææºæ ï¼ä¹æ¯çº¿ç¨ç§æçï¼å
¶çå½å¨æä¸çº¿ç¨ç¸åãé常åæ¾åºæ¬æ°æ®ç±»åï¼å¯¹è±¡å¼ç¨ï¼ä¸ä¸ªæå对象起å§å°åçå¼ç¨æéæä¸ä¸ªä»£è¡¨å¯¹è±¡çå¥æï¼ï¼reeturnAddressç±»åï¼æåä¸æ¡åèç æ令çå°åï¼
æ åºåæ两ç§å¼å¸¸ç±»åï¼å¦æ线ç¨è¯·æ±çæ 深度大äºèææºæå
许ç深度ï¼å°æStrackOverflowErrorå¼å¸¸ï¼å¦æèææºæ å¯ä»¥å¨ææ©å±ï¼å¤§é¨åèææºé½å¯å¨ææ©å±ï¼ï¼å½æ©å±æ¶æ æ³ç³è¯·å°è¶³å¤çå
åæ¶ä¼æåºOutOfMemoryErrorå¼å¸¸ã
3ï¼ æ¬å°æ¹æ³æ
ä¸èææºæ ä½ç¨å¾ç¸ä¼¼ï¼åºå«æ¯èææºæ 为èææºæ§è¡javaæ¹æ³æå¡ï¼èæ¬å°æ¹æ³æ åæ¯ä¸ºèææºç¨å°çNativeæ¹æ³æå¡ãåèææºæ ä¸æ ·å¯è½æåºStackOverflowErroråOutOfMemoryErrorå¼å¸¸ã
4ï¼ javaå
java
Heapæ¯jvmæ管ççå
åä¸æ大çåºåãJavaHeapæ¯è¢«ææ线ç¨å
±äº«çä¸åå
ååºåï¼å¨èææºå¯å¨æ¶å建ã主è¦åæ¾å¯¹è±¡å®ä¾ãJavaHeap
æ¯åå¾æ¶éå¨ç®¡çç主è¦åºåï¼å
¶å¯ç»å为æ°ç代åè年代ãå¦æå¨å ä¸æ²¡æå
åå®æå®ä¾åé
ï¼å¹¶ä¸ä¹æ æ³åæ©å±æ¶ï¼ä¼æåºOutOfMemoryError
å¼å¸¸ã
5ï¼ æ¹æ³åº
ä¸javaHeapä¸æ ·æ¯å个线ç¨å
±äº«çå
ååºåï¼ç¨äºåæ¾å·²è¢«èææºå è½½ç类信æ¯ã常éãéæåéãåæ¶ç¼è¯å¨ç¼è¯åç代ç çæ°æ®ãå½æ¹æ³åºæ æ³æ»¡è¶³å
ååé
çéæ±æ¶ï¼å°æåºOutOfMemoryErrorå¼å¸¸ãæ¹æ³åæ¶å
å«å¸¸å¬è¯´çè¿è¡æ¶å¸¸éæ± ï¼ç¨äºåæ¾ç¼è¯æçæçåç§åé¢éå符å·å¼ç¨ã
6ï¼ ç´æ¥å
å
ç´æ¥å
å并ä¸æ¯èææºè¿è¡æ¶æ°æ®åºçä¸é¨åï¼ä¹ä¸æ¯javaèææºè§èä¸å®ä¹çå
ååºåï¼æ¯jvmå¤é¨çå
ååºåï¼è¿é¨ååºåä¹å¯è½å¯¼è´OutOfMemoryErrorå¼å¸¸ã
äºï¼jvmåæ°
-Xssï¼StackSpaceï¼æ 空é´
-Xms ï¼-Xmxï¼heap memory
spaceï¼å 空é´ï¼Heapæ¯å¤§å®¶æ为çæçåºåï¼ä»æ¯jvmç¨æ¥åå¨å¯¹è±¡å®ä¾çåºåï¼Heapå¨32ä½çç³»ç»ä¸æ大为2Gï¼å
¶å¤§å°éè¿-Xmså
-Xmxæ¥æ§å¶ï¼-Xms为jvmå¯å¨æ¶ç³è¯·çæå°Heapå
åï¼é»è®¤ä¸ºç©çå
åç1/64ï¼ä½å°äº1Gï¼-Xmx为jvmå¯ç³è¯·çæ大çHeapå
åï¼
é»è®¤ä¸ºç©çå
åç1/4,ä¸è¬ä¹å°äº1Gï¼é»è®¤å½ç©ºä½å å
åå°äº40%æ¶ï¼jvmä¼æ大Heapç大å°å°-Xmxæå®å¤§å°ï¼å¯éè¿
-XX:MinHeapFreeRatioæ¥æå®è¿ä¸ªæ¯ä¾ï¼å½ç©ºä½å å
å大äº70%æ¶ï¼JVMä¼å°Heapç大å°å¾-Xmsæå®ç大å°è°æ´ï¼å¯éè¿
-XX:MaxHeapFreeRatioæ¥æå®è¿ä¸ªæ¯ä¾ï¼ä½é常为äºé¿å
é¢ç¹è°æ´HeapSizeç大å°ï¼å°-Xmså-Xmxçå¼è®¾ä¸ºç¸åã
-XX:PermSize -XX:MaxPermSize ï¼æ¹æ³åºæä¹
代大å°ï¼ æ¹æ³åºåä¹æ¯å
¨å±å
±äº«çï¼å¨ä¸å®çæ¡ä»¶ä¸å®ä¹ä¼è¢« GC ï¼å½æ¹æ³åºåéè¦ä½¿ç¨çå
åè¶
è¿å
¶å
许ç大å°æ¶ï¼ä¼æåº OutOfMemory çé误信æ¯ã
ä¸ï¼å¸¸è§å
å溢åºé误解å³åæ³
1ï¼ OutOfMemoryErrorå¼å¸¸
é¤äºç¨åºè®¡æ°å¨å¤ï¼èææºå
åçå
¶ä»å 个è¿è¡æ¶åºåé½æåçOutOfMemoryError(OOM)å¼å¸¸çå¯è½ï¼
Java Heap 溢åº
ä¸è¬çå¼å¸¸ä¿¡æ¯ï¼java.lang.OutOfMemoryError:Java heap spacess
javaå ç¨äºåå¨å¯¹è±¡å®ä¾ï¼æ们åªè¦ä¸æçå建对象ï¼å¹¶ä¸ä¿è¯GC Rootså°å¯¹è±¡ä¹é´æå¯è¾¾è·¯å¾æ¥é¿å
åå¾åæ¶æºå¶æ¸
é¤è¿äºå¯¹è±¡ï¼å°±ä¼å¨å¯¹è±¡æ°éè¾¾å°æ大å 容ééå¶å产çå
å溢åºå¼å¸¸ã
åºç°è¿ç§å¼å¸¸ï¼ä¸è¬æ段æ¯å
éè¿å
åæ ååæå·¥å
·(å¦Eclipse Memory
Analyzer)对dumpåºæ¥çå 转åå¿«ç
§è¿è¡åæï¼éç¹æ¯ç¡®è®¤å
åä¸ç对象æ¯å¦æ¯å¿
è¦çï¼å
åæ¸
æ¯å 为å
åæ³æ¼(Memory
Leak)è¿æ¯å
å溢åº(Memory Overflow)ã
å¦ææ¯å
åæ³æ¼ï¼å¯è¿ä¸æ¥éè¿å·¥å
·æ¥çæ³æ¼å¯¹è±¡å°GC Rootsçå¼ç¨é¾ãäºæ¯å°±è½æ¾å°æ³æ¼å¯¹è±¡æ¶éè¿ææ ·çè·¯å¾ä¸GC Rootsç¸å
³è并导è´åå¾æ¶éå¨æ æ³èªå¨åæ¶ã
å¦æä¸åå¨æ³æ¼ï¼é£å°±åºè¯¥æ£æ¥èææºçåæ°(-Xmxä¸-Xms)ç设置æ¯å¦éå½ã
2ï¼ èææºæ åæ¬å°æ¹æ³æ 溢åº
å¦æ线ç¨è¯·æ±çæ 深度大äºèææºæå
许çæ大深度ï¼å°æåºStackOverflowErrorå¼å¸¸ã
å¦æèææºå¨æ©å±æ æ¶æ æ³ç³è¯·å°è¶³å¤çå
å空é´ï¼åæåºOutOfMemoryErrorå¼å¸¸
è¿ééè¦æ³¨æå½æ ç大å°è¶å¤§å¯åé
ç线ç¨æ°å°±è¶å°ã
3ï¼ è¿è¡æ¶å¸¸éæ± æº¢åº
å¼å¸¸ä¿¡æ¯ï¼java.lang.OutOfMemoryError:PermGen space
å¦æè¦åè¿è¡æ¶å¸¸éæ± ä¸æ·»å å
容ï¼æç®åçåæ³å°±æ¯ä½¿ç¨String.intern()è¿ä¸ªNativeæ¹æ³ã该æ¹æ³çä½ç¨æ¯ï¼å¦ææ± ä¸å·²ç»å
å«ä¸ä¸ªçäº
æ¤Stringçå符串ï¼åè¿åä»£è¡¨æ± ä¸è¿ä¸ªå符串çString对象ï¼å¦åï¼å°æ¤String对象å
å«çå符串添å å°å¸¸éæ± ä¸ï¼å¹¶ä¸è¿åæ¤String
对象çå¼ç¨ãç±äºå¸¸éæ± åé
å¨æ¹æ³åºå
ï¼æ们å¯ä»¥éè¿-XX:PermSizeå-XX:MaxPermSizeéå¶æ¹æ³åºç大å°ï¼ä»èé´æ¥éå¶å
¶ä¸å¸¸é
æ± ç容éã
4ï¼ æ¹æ³åºæº¢åº
æ¹æ³åºç¨äºåæ¾Classçç¸å
³ä¿¡æ¯ï¼å¦ç±»åã访é®ä¿®é¥°ç¬¦ã常éæ± ãå段æè¿°ãæ¹æ³æè¿°çã
å¼å¸¸ä¿¡æ¯ï¼java.lang.OutOfMemoryError:PermGen space
æ¹æ³åºæº¢åºä¹æ¯ä¸ç§å¸¸è§çå
å溢åºå¼å¸¸ï¼ä¸ä¸ªç±»å¦æè¦è¢«åå¾æ¶éå¨åæ¶ï¼å¤å®æ¡ä»¶æ¯å¾èå»çãå¨ç»å¸¸å¨æçæ大éClassçåºç¨ä¸ï¼è¦ç¹å«æ³¨æè¿ç¹ã
温馨提示:答案为网友推荐,仅供参考