娣卞叆浜嗚ВJVM绗旇(一)鈥斿唴瀛樺尯鍩熶笌鍐呭瓨婧㈠嚭寮傚父

娣卞叆浜嗚ВJVM绗旇(1)鈥斿唴瀛樺尯鍩熶笌鍐呭瓨婧㈠嚭寮傚父

鍦ㄥ墠闈㈢殑鍑犵瘒鍗氭枃涓紝鎴戜滑涓€璧风畝鍗曠殑浜嗚Вjvm鐨勫熀鏈煡璇嗭紝渚嬪jvm瀵瑰瓧绗︿覆鐨勫鐞嗙瓑绛夛紝鎴栬澶у鐪嬪畬鍚庡氨鎶婅繖褰撴垚涓€鏉″噯鍒欐潵璁颁綇浜嗭紝浣嗘槸涓€浜涙瘮杈冨ソ濂囩殑鏈嬪弸鏈夋病鏈夋兂杩囷紝杩欐槸涓轰粈涔堝憿锛熶粬鐨勫師鐞嗘槸浠€涔堝憿锛熶笅闈㈠氨璁╂垜浠紑濮嬩竴姝ヤ竴姝ョ殑娣卞叆瀛︿範銆?/p>

鍦ㄨ繖绡囧崥鏂囦腑鍛紝鎴戞墦绠椾富瑕佸氨璁睯ava鍐呭瓨鍖哄煙涓庡唴瀛樻孩鍑哄紓甯稿惂銆備笅闈㈣█褰掓浼犲惂銆?/p>

1.Java铏氭嫙鏈鸿繍琛屾椂鏁版嵁鍖?/h2>

鍦ㄥ墠闈㈢殑鍑犵瘒鍗氭枃涓紝鎴戜滑鍙槸绠€鍗曠殑鎶婂唴瀛樺尯鍩熷垎涓轰簡鍫嗗拰鏍堬紝浣嗗叾瀹烇紝杩欑鍒嗘硶鏄崄鍒嗙矖绯欑殑锛宩vm鍦ㄥ疄闄呰繍琛岀殑鏃跺€欙紝鍐呭瓨鍖哄煙鐨勫垝鍒嗙粷瀵逛笉鏄偅涔堢畝绠€鍗曞崟鐨勫氨涓ゅ潡锛屾垜浠竴璧风湅涓嬮潰杩欎釜鍥惧氨鐭ラ亾浜嗐€?/p>

娣卞叆浜嗚ВJVM绗旇(一)鈥斿唴瀛樺尯鍩熶笌鍐呭瓨婧㈠嚭寮傚父

浠庝笂鍥炬垜浠煡閬撲簡锛孞VM铏氭嫙鏈鸿繍琛屾椂鏁版嵁鍖轰富瑕佸垝鍒嗕负锛?span style="color: #ff0000;">鏂规硶鍖恒€佽櫄鎷熸満鏍堛€佹湰鍦版柟娉曟爤銆佸爢銆佺▼搴忚鏁板櫒銆?/p>

1.1绋嬪簭璁℃暟鍣?/h3>

铏界劧鍦ㄤ笂鍥句腑锛岀▼搴忚鏁板櫒杩欏潡鍗犵敤鐨勫尯鍩熺敾鐨勫緢澶э紝浣嗗叾瀹烇紝鍦ㄥ唴瀛樹腑锛屽畠鍙槸杈冨皬鐨勪竴鍧楀唴瀛樼┖闂?/span>銆?/p>

1锛夌敓鍛藉懆鏈燂細绾跨▼绉佹湁鐨勶紝涓庡畠鎵€缁戝畾鐨勭嚎绋嬬浉鍚屻€?/p>

2锛変綔鐢細褰撳墠绾跨▼鎵€鎵ц鐨勫瓧鑺傜爜鐨勮鍙锋寚绀哄櫒锛岀畝鍗曠殑鍙互鐞嗚В鎴愶紝绋嬪簭璁℃暟鍣ㄨ褰曠潃涓嬩竴琛岃鎵ц鐨勪唬鐮佽鏁帮紝姣斿鎴戜滑缁忓父鍐欑殑鍒嗘敮銆佸惊鐜€佽烦杞兘鏄€氳繃鏀瑰彉璇ヨ鏁板櫒鐨勫€兼潵瀹屾垚鐨勩€?span style="color: #ff0000;">濡傛灉涓€涓嚎绋嬫鍦ㄦ墽琛岀殑鏄疛ava鏂规硶锛岃繖涓鏁板櫒璁板綍鐨勬槸姝e湪鎵ц鐨勮櫄鎷熸満瀛楄妭鐮佹寚浠ょ殑鍦板潃锛涘鏋滄鍦ㄦ墽琛岀殑鏄疦ative鏂规硶锛岃繖涓鏁板櫒鍒欎负绌恒€?/span>

3锛夌▼搴忚繍琛屾椂璇ュ尯鍩熷彲鑳藉彂鐢熺殑寮傚父锛氭鍐呭瓨鍖哄煙鏄?span style="color: #ff0000;">鍞竴涓€涓湪Java铏氭嫙鏈鸿鑼冧腑娌℃湁瑙勫畾浠讳綍OutOfMemoryError鎯呭喌鐨勫尯鍩?/span>銆?/p>

1.2Java铏氭嫙鏈烘爤

鍏跺疄杩欓噷鎵€璇寸殑鏍堬紝灏辨槸鍓嶉潰鎴戜滑鍗氭枃涓矖绯欏垎娉曞爢鏍堜腑鐨勬爤浜嗐€傜簿纭殑璁茬殑璇濓紝鍏跺疄鏄疛ava铏氭嫙鏈烘爤涓殑灞€閮ㄥ彉閲忚〃閮ㄥ垎鍚э紱鍚屾椂杩欓噷鏄笓闂ㄤ负铏氭嫙鏈烘墽琛宩ava鏂规硶鏈嶅姟鐨?/span>锛屼负浠€涔堣繖涔堣鍛紵鍥犱负鍐呭瓨鍖哄煙涓繕鏈夋湰鍦版柟娉曟爤锛?span style="color: #ff0000;">鏈湴鏂规硶鏍堟槸鍙负铏氭嫙鏈轰娇鐢ㄥ埌鐨凬ative鏂规硶鏈嶅姟鐨?/span>銆?/p>

1锛夌敓鍛藉懆鏈燂細绾跨▼绉佹湁鐨勶紝涓庡畠鎵€缁戝畾鐨勭嚎绋嬬浉鍚屻€?/p>

2锛変綔鐢細姣忎釜鏂规硶琚墽琛岀殑鏃跺€欓兘浼氬垱寤?span style="color: #ff0000;">涓€涓爤甯?/span>锛岀敤浜庡瓨鍌ㄥ眬閮ㄥ彉閲忚〃銆佹搷浣滄暟鏍堛€佸姩鎬侀摼鎺ャ€佹柟娉曞嚭鍙g瓑淇℃伅銆傛瘡涓柟娉曡璋冪敤鐩磋嚦鎵ц瀹屾垚鐨勮繃绋嬪氨瀵瑰簲鐫€涓€涓爤甯у湪铏氭嫙鏈烘爤涓粠鍏ユ爤鍒板嚭鏍堢殑杩囩▼銆傚叾涓眬閮ㄥ彉閲忚〃瀛樺偍鐨勬槸浠ヤ笅绫诲瀷锛?/p>

鈶犲熀鏈暟鎹被鍨?/strong>锛歜oolean, byte, char, short, int, float, long, double锛?/p>

鈶″璞″紩鐢?/strong>锛歳eference绫诲瀷锛屽畠涓嶇瓑浜庡璞℃湰韬紝鏍规嵁涓嶅悓鐨勮櫄鎷熸満瀹炵幇锛屽畠鍙兘鏄竴涓寚鍚戝璞¤捣濮嬪湴鍧€鐨勫紩鐢ㄦ枃绔狅紝涔熷彲鑳芥槸鎸囧悜涓€涓璞″彞鏌勬垨鍏朵粬涓庢瀵硅薄鏈夊叧鐨勪綅缃紱

鈶eturnAddress绫诲瀷锛氭寚鍚戜簡涓€鏉″瓧鑺傜爜鎸囦护鐨勫湴鍧€锛岀畝鍗曠殑璇达紝灏辨槸涓嬩竴鏉¤鎵ц鐨勪唬鐮佺殑鍦板潃锛?/p>

3锛夌▼搴忚繍琛屾椂璇ュ尯鍩熷彲鑳藉彂鐢熺殑寮傚父锛?/p>

鈶?/strong>绾跨▼璇锋眰鏍堟繁搴?> 铏氭嫙鏈哄厑璁告繁搴︼紝鎶涘嚭StackOverflowError锛沞g:

 1 package edu.outofmemoryerror.heap;
 2 
 3 public class JavaStackSOF {
 4     private int stackLength = 1;
 5     
 6     public void stackLeak() {
 7         stackLength++;
 8         stackLeak();
 9     }
10     
11     /**
12      * -Xss128K
13      * @param args
14      */
15     public static void main(String[] args) {
16         JavaStackSOF sf = new JavaStackSOF();
17         sf.stackLeak();
18     }
19 }

杩愯缁撴灉锛?img alt="">

娉ㄦ剰鍦ㄨ繍琛岀殑鏃跺€欐敞鎰忚鏀瑰彉閭d簺鍙傛暟锛涘鏋滄槸閫氳繃鎺у埗鍙板懡浠ゆ潵鎵ц鐨勶紝鍙互鐩存帴璺熷湪Java鍛戒护涔嬪悗涔﹀啓锛屽鏋滄槸閫氳繃Eclipse鏉ユ墽琛岀殑鍙互鍦ㄤ笅闈㈤〉闈㈡坊鍔犱笂鍐嶆潵鎵ц锛屽鍥撅細

娣卞叆浜嗚ВJVM绗旇(一)鈥斿唴瀛樺尯鍩熶笌鍐呭瓨婧㈠嚭寮傚父

鈶?/strong>璇ユ爤鍏佽鍔ㄦ€佹嫇灞曪紝褰撴棤娉曠敵璇峰埌瓒冲鐨勭┖闂存椂锛屾姏鍑篛utOfMemoryError寮傚父锛?/p>

1.3鏈湴鏂规硶鏍?/h3>

鏈湴鏂规硶鏍堣窡铏氭嫙鏈烘爤鐩镐技锛屼粬浠殑鍖哄埆鍦ㄥ墠闈㈠凡缁忔彁杩囦簡锛?span style="color: #ff0000;">鏈湴鏂规硶鏍堟槸鍙负铏氭嫙鏈轰娇鐢ㄥ埌鐨凬ative鏂规硶鏈嶅姟鐨勶紝鑰宩ava铏氭嫙鏈烘爤鏄?span style="color: #ff0000;">涓撻棬涓鸿櫄鎷熸満鎵цjava鏂规硶鏈嶅姟鐨?span style="color: #000000;">銆?/span>

1锛夌敓鍛藉懆鏈燂細绾跨▼绉佹湁鐨勶紝涓庡畠鎵€缁戝畾鐨勭嚎绋嬬浉鍚屻€?/p>

2锛変綔鐢細涓轰娇鐢ㄥ埌鐨凬ative鏂规硶鏈嶅姟銆?/p>

3锛夌▼搴忚繍琛屾椂璇ュ尯鍩熷彲鑳藉彂鐢熺殑寮傚父锛氳窡铏氭嫙鏈烘爤涓€鏍枫€?/p>

1.4Java鍫?Java Heap)

瀵逛簬寰堝搴旂敤鏉ヨ锛?span style="color: #ff0000;">Java鍫嗘槸Java铏氭嫙鏈烘墍绠$悊鐨勫唴瀛樹腑鏈€澶х殑涓€鍧?span style="color: #000000;">銆?/span>

1锛夌敓鍛藉懆鏈燂細绾跨▼鍏变韩鐨勶紝鍦ㄨ櫄鎷熸満鍚姩鏃跺氨鍒涘缓

2锛変綔鐢細瀛樻斁瀵硅薄瀹炰緥锛屽嚑涔庢墍鏈夌殑瀵硅薄瀹炰緥浠ュ強鏁扮粍閮藉湪杩欓噷鍒嗛厤鍐呭瓨銆?/span>

3锛夌▼搴忚繍琛屾椂璇ュ尯鍩熷彲鑳藉彂鐢熺殑寮傚父锛氬爢涓病鏈夊唴瀛樺畬鎴愬疄渚嬪垎閰嶆垨鑰呭爢鏃犳硶鍐嶆嫇灞曟椂锛屽皢浼氭姏鍑篛utOfMemoryError寮傚父锛宔g锛?/span>

 1 package edu.outofmemoryerror.heap;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class HeapOOM {
 7     static  class OOMObject { }
 8     
 9     /**
10      * -Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError
11      * @param args
12      */
13     public static void main(String[] args) {
14         List<OOMObject> list = new ArrayList<OOMObject>();
15         while (true) {
16             list.add(new OOMObject());
17         }
18     }
19 }

杩愯缁撴灉锛?img alt="">

1.5鏂规硶鍖猴紙Method Area锛?/span>

鏂规硶鍖烘湁涓€涓埆鍚嶅彨鍋氶潪鍫?Non-Heap)锛屽浜庝範鎯湪HotSpot铏氭嫙鏈轰笂寮€鍙戝拰閮ㄧ讲绋嬪簭鐨勫紑鍙戣€呮潵璇达紝瀹冧篃鍙€滄案涔呬唬鈥濄€?/span>

1锛夌敓鍛藉懆鏈燂細绾跨▼鍏变韩鐨勶紝鍦ㄨ櫄鎷熸満鍚姩鏃跺氨鍒涘缓

2锛変綔鐢細瀛樺偍宸茶铏氭嫙鏈哄姞杞界殑绫讳俊鎭€佸父閲忋€侀潤鎬佸彉閲忥紝涔熷氨鏄紪璇戝櫒缂栬瘧鍚庣殑浠g爜鏁版嵁銆?/span>

3锛夌▼搴忚繍琛屾椂璇ュ尯鍩熷彲鑳藉彂鐢熺殑寮傚父锛氬綋鏂规硶鍖烘棤娉曟弧瓒冲唴瀛樺垎閰嶉渶姹傛椂锛屽皢浼氭姏鍑篛utOfMemoryError寮傚父銆傛瘮濡俲ava.lang.OutOfMemoryError,杩欎釜閿欒鍏跺疄瀵逛簬缁忓父浣跨敤SSh妗嗘灦杩涜寮€鍙戠殑鎴戜滑搴旇寰堢啛鎮?瀹冨氨鏄敱浜庢柟娉曞尯绌洪棿涓嶈冻瀵艰嚧鐨勫唴瀛樻孩鍑恒€?br>

鍥犱负璇ュ尯鍩熶腑鐨勫瀮鍦炬敹闆嗚涓烘槸姣旇緝灏戝嚭鐜扮殑锛屾墍浠ュ璞$浉褰撲簬姘镐箙涓嶈鍥炴敹涓€鑸紝鎵€浠ュ湪杩欎釜鍖哄煙灏卞彨鍋氣€滄案涔呬唬鈥濅簡銆?/span>

1.5.1杩愯鏃跺父閲忔睜

杩愯甯搁噺姹犳槸鏂规硶鍖虹殑涓€閮ㄥ垎銆?/span>

1锛夌敓鍛藉懆鏈燂細绾跨▼鍏变韩鐨勶紝鍦ㄨ櫄鎷熸満鍚姩鏃跺氨鍒涘缓

2锛?/span>浣滅敤锛氬瓨鏀綜lass鏂囦欢涓被鐨勭増鏈€佸瓧娈点€佹柟娉曘€佹帴鍙g瓑鎻忚堪淇℃伅澶栵紝杩樻湁涓€浜涗俊鎭槸甯搁噺姹狅紝鐢ㄤ簬瀛樻斁缂栬瘧鏈熼棿鐢熶骇鐨勫悇绉嶅瓧闈㈤噺鍜岀鍙峰紩鐢紝杩欓儴鍒嗗唴瀹瑰皢鍦ㄧ被鍔犺浇鍚庡瓨鏀惧埌鏂规硶鍖虹殑杩愯鏄父閲忔睜涓€?/span>

3锛夌▼搴忚繍琛屾椂璇ュ尯鍩熷彲鑳藉彂鐢熺殑寮傚父锛氳繍琛屾椂鏄柟娉曞尯鐨勪竴閮ㄥ垎锛岃嚜鐒舵敹鍒版柟娉曞尯鍐呭瓨鐨勯檺鍒讹紝褰撳父閲忔睜鏃犳硶鍦ㄧ敵璇峰埌鍐呭瓨鏄氨浼氭姏鍑?span style="color: #ff0000;">OutOfMemoryError寮傚父

鐪嬪埌杩欓噷锛屼笉鐭ラ亾澶у浼氫笉浼氭兂璧峰墠闈竴绡囧崥鏂囦腑鎴戜滑璇寸殑JVM瀵瑰瓧绗︿覆鐨勫鐞嗗憿锛?/span>

娌¢敊锛屽湪閭g瘒鍗氭枃涓鐨凧ava瀛楃涓茬紦鍐叉睜锛屽叾瀹炲氨鏄繍琛屾椂甯搁噺姹犵殑涓€閮ㄥ垎锛岃€岃繍琛屾睜鏄湪鏂规硶鍖轰腑鐨勶紝鏂规硶鍖轰腑鐨勫瀮鍦炬敹闆嗚涓烘槸鍑犱箮娌℃湁鐨勶紝鐩稿綋浜庝笉浼氳鍥炴敹銆傝繖灏辨槸鍓嶉潰鐨凧VM瀵瑰瓧绗︿覆澶勭悊鐨勫師鐞嗕簡銆?/span>

1.6鐩存帴鍐呭瓨

鍏跺疄鐩存帴鍐呭瓨涓嶆槸铏氭嫙鏈鸿繍琛屾椂鏁版嵁鍖虹殑涓€閮ㄥ垎锛屼篃涓嶆槸Java铏氭嫙鏈鸿鑼冧腑鐨勪竴閮ㄥ垎锛屼絾鏄繖閮ㄥ垎涔熼绻佺殑浣跨敤锛屼篃鍙兘浼氬鑷?span style="color: #ff0000;">OutOfMemoryError寮傚父鐨勫嚭鐜般€?/p>

2寮曠敤瀵硅薄鐨勮闂?/h2>

鍦ㄤ箣鍓嶆垜浠湁涓€绡囧崥鏂囪浜嗗叧浜庡璞′笌鍐呭瓨绠$悊鐨勭煡璇嗭紝浣嗘槸閭i噷鍙槸姣旇緝绠€鍗曠殑锛屼笅闈㈡垜浠洿鍔犳繁鍏ヤ簡瑙d竴涓嬶紝鍦↗ava璇█涓紝瀵硅薄璁块棶鏄浣曡繘琛岀殑锛?/p>

鍏跺疄瀵硅薄璁块棶骞朵笉鍍忓墠闈㈤偅绡囧崥鏂囦腑璁茬殑閭d箞绠€鍗曞彧娑夊強鍒板爢鍜屾爤锛屽洜涓哄嵆浣挎槸鏈€绠€鍗曠殑璁块棶锛屼篃浼氭秹鍙婂埌Java铏氭嫙鏈烘爤锛孞ava鍫嗭紝鏂规硶鍖鸿繖涓変釜閲嶈鐨勫唴瀛樺尯鍩熴€備箣鎵€浠ュ彧璁插爢鍜屾爤鏄洜涓哄紑鍙戜汉鍛樺湪澶у鏁版儏鍐典笅鍏虫敞鐨勬渶澶氱殑鏄爢鍜屾爤涓や釜鍖哄煙銆?/p>

鍏充簬鍩烘湰绫诲瀷鐨勮闂紝鍦ㄥ墠闈㈤偅绡囧崥鏂囦腑鎴戜滑宸茬粡璁蹭簡锛屼笅闈紝鎴戜滑鍏堟彁涓€涓嬬浉鍏崇殑姒傚康锛?/p>

1锛夊璞$被鍨嬫暟鎹?/strong>锛氭寚鐨勬槸璇ュ璞$殑瀵硅薄绫诲瀷锛岀埗绫伙紝瀹炵幇鐨勬帴鍙o紝鏂规硶绛夛紝鍏跺疄灏辨槸鍓嶉潰璇寸殑锛屾柟娉曞尯瀛樺偍鐨勬槸鍔犺浇鐨勫璞$殑淇℃伅銆?/p>

2锛?/span>瀵硅薄瀹炰緥鏁版嵁锛氭寚鐨勬槸璇ョ被瀹炰緥鍖栧悗鐨勫璞$殑瀹炰緥鍙橀噺鐨勫€笺€?/p>

鎺ョ潃锛屾垜浠户缁噸鐐规繁鍏ヨ瑙d笅鍏充簬寮曠敤绫诲瀷瀵硅薄鐨?span style="color: #ff0000;">涓ょ璁块棶鏂瑰紡锛?/p>

1锛変娇鐢ㄥ彞鏌勬柟寮忚闂?/h3>

浣跨敤杩欑瀵硅薄鐨勮闂柟寮忕殑浼樺娍鏄細瀛樺偍鐨勬槸绋冲畾鐨勫彞鏌勫湴鍧€锛屽湪瀵硅薄绉诲姩鏃跺彧浼氭敼鍙樺彞鏌勪腑鐨勫疄渚嬫暟鎹寚閽堬紝鑰宺eference鏈韩涓嶇敤鏀瑰彉銆?/p>

浣跨敤鍙ユ焺姹犺闂柟寮忥紝Java鍫嗕腑灏嗕細鍒掑垎鍑轰竴鍧楀唴瀛樻潵浣滄枃鍙ユ焺姹狅紝reference涓瓨鍌ㄧ殑鏄璞$殑鍙ユ焺鍦板潃锛岃€屽彞鏌勪腑鍖呭惈浜嗗璞″疄鍔涙暟鎹拰绫诲瀷鏁版嵁鍚勮嚜鐨勫叿浣撳湴鍧€淇℃伅銆?/p>

娣卞叆浜嗚ВJVM绗旇(一)鈥斿唴瀛樺尯鍩熶笌鍐呭瓨婧㈠嚭寮傚父

鍏跺疄浠庝笂鍥句腑锛屾垜浠繕鑳界湅鍑轰竴涓煡璇嗙偣锛岄偅灏辨槸锛?span style="color: #ff0000;">64浣嶉暱搴︾殑long鍜宒ouble绫诲瀷鐨勬暟鎹細鍗犵敤2涓眬閮ㄥ彉閲忕┖闂?/span>

2锛変娇鐢ㄧ洿鎺ユ寚閽堣闂柟寮?/span>

浣跨敤杩欑璁块棶鏂瑰紡鐨勪紭鍔挎槸锛?span style="color: #ff0000;">璁块棶閫熷害蹇?/span>銆?/span>

娣卞叆浜嗚ВJVM绗旇(一)鈥斿唴瀛樺尯鍩熶笌鍐呭瓨婧㈠嚭寮傚父

[鏈枃涓哄師鍒涳紝杞浇璇锋敞鏄庡嚭澶勶細http://www.cnblogs.com/xiaoxuetu]