锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 銆銆J2ME騫沖彴涓湁鍑犱釜閲嶈鐨勬蹇碉紝渚嬪鍐呭瓨銆丆LDC銆丮IDP絳夈傚垵瀛2ME寰寰瀵硅繖浜涙蹇電悊瑙d笉娣憋紝鐢氳嚦鍑虹幇鍋忓樊銆傛湰鏂囩殑鐩殑鍦ㄤ簬瀵笿2ME涓殑鐩稿叧閲嶈姒傚康榪涜闃愯堪銆?/p>
銆銆1. 鍐呭瓨 銆銆鎴戜滑涓鐩村湪寮鴻皟錛岀Щ鍔ㄤ俊鎭澶囩殑鍐呭瓨闈炲父灝忥紝浣跨敤璧鋒潵搴旇鍔犲嶇殑鐝嶆儨錛屼絾鏄垜浠嵈寰堝皯鐭ラ亾榪欎簺鍐呭瓨鏄浣曞垎綾葷殑錛屼笅闈㈠皢鍋氳緇嗙殑浠嬬粛銆備簨瀹炰笂MIDP璁懼鐨勫唴瀛樺垎涓轟笁縐嶏紝Programme Memory銆丠eap銆乸ersistent Storage銆?/p>
銆銆Programme Memory鏄Щ鍔ㄤ俊鎭澶囧垎閰嶇粰MIDlet suite鐨勭┖闂達紝鍥犱負MIDlet suite鏄互jar鏂囦歡榪涜鍙戝竷鐨勶紝鎵浠ヨ繖涓枃浠剁殑澶у皬鍙互璁や負鏄疨rogramme Memory鐨勫ぇ灝忋備竴浜涘巶鍟嗗Programme Memory鐨勬渶澶у兼槸鏈夐檺鍒剁殑錛屼緥濡傛垜鐨凬okia 6108鐨勬渶澶у兼槸 64k錛岃秴榪囩殑璇濆皢涓嶈兘榪涜瀹夎銆傚噺灝廙IDlet suite鐨勫ぇ灝忛潪甯擱噸瑕侊紝涓涓究鎹風殑鏂規(guī)硶灝辨槸浣跨敤娣鋒穯鍣ㄥ搴旂敤紼嬪簭榪涜娣鋒穯錛岃繖鏍峰彲浠ュ噺灝廽ar鏂囦歡鐨勫ぇ灝忋傚湪浠ュ悗鐨勬枃绔犱腑鎴戜細璋堝埌濡備綍浣跨敤 Proguard銆?/p>
銆銆Heap鏄簲鐢ㄧ▼搴忓湪榪愯榪囩▼涓瓨鏀炬墍鍒涘緩鐨勫璞$殑瀛樺偍絀洪棿錛屾湰鍦板彉閲忓拰鎴愬憳鍙橀噺涔熸槸鏀懼湪Heap涓婄殑錛孧IDP璁懼涓彁渚涚殑Heap絀洪棿澶ф鍦ㄥ嚑鍗乲鍒板嚑鐧綤銆?/p>
銆銆Persistent Storage鐨勭┖闂存槸鐢ㄦ潵瀹炵幇MIDP搴旂敤紼嬪簭鐨勬湰鍦版暟鎹寔涔呮у瓨鍌ㄧ殑錛屽湪Record Management System浠庡叆闂ㄥ埌綺鵑氫腑鎴戝仛浜嗚緇嗙殑浠嬬粛榪欓噷灝變笉鍐嶅璇翠簡銆?/p>
銆銆2. Connected Limited Device Configuration 銆銆CLDC鍖呮嫭涓涓?strong>Java 銆銆3. Mobile Infomation Device Profile 銆銆MIDP鏄繍琛屽湪CLDC鍩虹涔嬩笂鐨勶紝鍦∕IDP涓畾涔変簡搴旂敤紼嬪簭鐨勭敓鍛藉懆鏈熴佺敤鎴峰浘褰㈢晫闈€佹暟鎹鐞嗙郴緇熺瓑瀛愰泦錛屼粠鑰屾瀯寤鴻搗浜咼2ME騫沖彴銆傞氬父錛?strong>J2ME 銆銆甯屾湜閫氳繃浠ヤ笂鍐呭鐨勪粙緇嶏紝璁╀綘鑳芥洿濂界殑搴旂敤J2ME騫沖彴銆?/p> 銆銆鍏堢敤鍛戒護jps鎵懼嚭瑕佽皟璇曠殑jvm鐨勮繘紼媔d(jps榪欎釜鍛戒護錛屽氨鏄痯s鍛戒護鍓嶉潰鍔爅錛屽垪鍑烘墍鏈夋鍦ㄨ繍琛岀殑jvm鐨勮繘紼媔d)銆?/p>
銆銆渚嬪錛歫ps 銆銆杈撳嚭綾諱技涓嬮潰榪欐牱錛?5976 java_app.jar 7586 startup.jar 22476 Jps 12248 Main 5437 Bootstrap 銆銆鍋囪鎴戜滑瑕佽皟璇曠殑榪涚▼id鏄?5976. 銆銆濡傛灉鍙槸鎯崇畝鍗曡瀵熶竴涓嬪爢鍐呭瓨鐨勪嬌鐢ㄦ儏鍐碉紝鍙互鐢ㄥ懡浠map -histo錛歭ive 15976榪欎釜鍛戒護浼氳緭鍑烘寚瀹氱殑jvm涓婂綋鍓嶅悇涓?strong>Java綾葷殑瀹炰緥鏁般佸崰鐢ㄧ殑鍐呭瓨澶у皬鍜屽畬鏁寸殑綾誨悕銆傝櫄鎷熸満鍐呴儴綾葷殑綾誨悕鍓嶉潰鏈?*"鏍囪銆?/p>
銆銆濡傛灉鎯沖緱鍒板爢鍐呭瓨浣跨敤鐨勮緇嗘儏鍐碉紝鍙互鐢ㄥ懡浠map -dump錛歭ive錛宖ormat=b錛宖ile=/tmp/java_app-heap.bin 15976 銆銆榪欐牱鍦?tmp鐩綍涓嬪緱鍒頒竴涓猨ava_app-heap.bin鏂囦歡錛屽叾涓繚瀛樼殑淇℃伅灝辨槸鎸囧畾鐨刯vm涓爢鍐呭瓨鐨勪嬌鐢ㄨ鎯呫傝繖涓簩榪涘埗鏂囦歡鍙互鐢↗DK闄勫甫鐨刯hat(Java Heap Analysis Tool)鏉ュ垎鏋愶細 銆銆jhat -J-Xmx326m /tmp/java_app-heap.bin 銆銆榪欎釜宸ュ叿鐩稿綋鑰楀唴瀛橈紝濡傛灉鍑虹幇浜哋utOfMemoryException鐨勮瘽錛岃鍔犲ぇ-J-Xmx326m涓寚瀹氱殑棰勭暀鍫嗗唴瀛樺ぇ灝忓啀璇曘?/p>
銆銆Jhat浼氳В鏋愬爢鍐呭瓨淇℃伅杞偍鏂囦歡(涓婇潰鐢╦map鐢熸垚鐨勩俠in鏂囦歡)錛岃緭鍑哄ぇ姒傚儚涓嬮潰榪欐牱錛?/p>
銆銆lewis@mgr $ jhat -J-Xmx326m /tmp/java_app-heap.bin Reading from /tmp/java_app-heap.bin…… 銆銆Dump file created Thu Sep 08 20錛?8錛?4 CST 2011 Snapshot read錛?resolving…… 銆銆Resolving 71327 objects…… 銆銆Chasing references錛?expect 14 dots…… 銆銆Eliminating duplicate references…… 銆銆Snapshot resolved. Started HTTP server on port 7000 Server is ready. 銆銆娉ㄦ剰鏈鍚庝袱琛岋細鍫嗗唴瀛樹俊鎭漿鍌ㄦ枃浠跺垎鏋愬畬姣曞悗錛宩hat騫朵笉浼氬皢鍒嗘瀽緇撴灉杈撳嚭涓轟竴涓潤鎬佹枃浠躲?/p>
銆銆涓轟簡鏂逛究鏌ユ壘錛屼互鍙婂湪鐩稿叧鐨勭被涔嬮棿瀵艱埅錛宩hat浼氬惎鍔ㄤ竴涓湇鍔★紝鐩戝惉7000绔彛銆傝繖鏃跺欏氨鍙互鐢ㄦ祻瑙堝櫒鏉ユ祻瑙堝拰鍒嗘瀽緇撴灉浜嗭細鍦ㄦ祻瑙堝櫒鍦板潃鏍忛噷杈撳叆錛?/p>
銆銆http://localhost錛?000 銆銆閲岄潰鐨勫悇涓〉闈㈤兘鏈夊緢澶氶摼鎺ワ紝鍙互鍦ㄧ浉鍏崇殑鍚勪釜綾誨強鍚勭緇熻鏁版嵁涔嬮棿璺寵漿錛岃繕鏄緢鏂逛究鐨勩?/p> 銆銆鍗充嬌浣犲笇鏈涜兘澶熶嬌鐢↗AR涓偅浜涘厛榪涚殑鍔熻兘姣斿鐢?shù)瀛惤{懼悕錛屼綘涔熷緱鍏堢啛鎮(zhèn)変竴浜涘熀鏈殑鎿嶄綔鏂瑰紡銆?/p>
銆銆浣犲彲浠ヤ嬌鐢?strong>Java
]]>
銆銆涓嬮潰鏄渶鍩烘湰鐨勫懡浠ゆ搷浣滐細
銆銆鎿嶄綔 鍛戒護鍒涘緩涓涓狫AR鏂囦歡銆?jar cf jar-file input-file(s)
銆銆鏌ョ湅JAR鏂囦歡鐨勫唴瀹?jar tf jar-file瀵煎嚭JAR鏂囦歡 jar xf jar-file瀵煎嚭JAR鏂囦歡涓埗瀹氱殑鏂囦歡鍖?jar xf jar-file archived-file(s)
銆銆榪愯JAR鏂囦歡涓殑搴旂敤jre -cp app.jar MainClass榪愯鐢↗AR鏍煎紡鎵撳寘鐨勫簲鐢╦ava -jar app.jar璋冪敤涓涓墦鍖呮垚JAR鐨刟pplet 涓嬮潰鏄竴浜涜緇嗙殑浠嬬粛錛?/p>
銆銆鍒涘緩JAR鏂囦歡
銆銆jar -cf jar-file input-file(s)
銆銆鍏朵腑c琛ㄧずcreate錛宖琛ㄧずfile錛屽悗闈㈢揣璺焜ar-file.涔熷彲浠ュ鍔犱竴涓獀閫夐」(verbose)錛屼互鏄劇ず璇︾粏淇℃伅 jar -cvf jar-file input-file(s)
銆銆鍏跺疄榪欎簺鍛戒護璺熷父瑙佺殑tar鎵撳寘鍛戒護綾諱技錛屾柟渚胯蹇嗐?/p>
銆銆鍙﹀錛屽湪1.2鐨勭増鏈腑榪樿緗簡涓縐?-C 鐨勯夐」銆傚彲浠ヨ鏌愪簺鏂囦歡澶逛腑鐨勬枃浠剁洿鎺ヨ鎵撳寘鍒版牴鐩綍涓嬶紝鑰屾病鏈夊師濮嬬殑灞傛緇撴瀯鐨勬潫緙氥傚涓嬩緥錛歫ar cf ImageAudio.jar -C images * -C audio *緇撴灉鏄疢ETA-INF/MANIFEST.MF cross.gif nor.gif beep.au ding.au return.au yahoo1.au yahoo2.au
銆銆濡傛灉涓嶇敤 -C閫夐」錛岀洿鎺ユ墦鍖咃細
銆銆jar cf ImageAudio.jar images audio
銆銆緇撴灉濡備笅錛歁ETA-INF/MANIFEST.MF image/cross.gif image/nor.gif audio/beep.au audio/ding.au audio/return.au audio/yahoo1.au audio/yahoo2.au
銆銆鏌ョ湅JAR鏂囦歡涓殑鍐呭You can榪欐椂鍊欏茍娌℃湁瑙e帇jar鏂囦歡錛岀洿鎺ユ煡鐪嬫枃浠跺唴瀹廣?/p>
銆銆jar tvf TicTacToe.jar鍚屾牱鐨勶紝涔熷彲浠ュ鍔?-v 閫夐」(verbose)錛屾樉紺鴻緇嗙殑鏌ョ湅榪囩▼銆?/p>
銆銆瑙e帇JAR鏂囦歡鍖?/p>
銆銆灝唈ar鏂囦歡鍖呬腑鐨勫唴瀹硅В鍘嬪嚭鏉ワ紝鍦ㄥ綋鍓嶅伐浣滅洰褰曚笅(鑰屼笉鏄痡ar鏂囦歡鍖呮墍鍦ㄧ洰褰?鍒涘緩瑙e帇鏂囦歡鍖呫?/p>
銆銆褰撶劧錛屼篃鍙互瀹氬悜鐨勮В鍘嬫寚瀹氱殑鏂囦歡銆傚涓嬶紝鍏朵腑浠呮湁TicTacToe.class images/cross.gif灝嗕細琚В鍘嬪嚭鏉ャ?/p>
銆銆jar xf TicTacToe.jar TicTacToe.class images/cross.gif
銆銆淇敼Manifest鏂囦歡鏈変笉灝戜慨鏀筂anifest鏂囦歡鐨勬柟娉曘傝繖閲屼粙緇嶄竴縐嶇敤jar鎸囦護淇敼鐨勬柟娉曘?/p>
銆銆鏈変竴涓猰閫夐」錛屽彲浠ュ皢鐢ㄦ埛鑷繁緙栬緫鐨刴anifest鏂囦歡鍚屽叾浠栨枃浠跺す涓璧鋒墦鍖呬負JAR鏂囦歡銆?/p>
銆銆jar cmf manifest-addition jar-file input-file(s)
銆銆榪欓噷 manifest-addition 鏄敤鎴瘋嚜宸辯紪杈戝ソ鐨勬枃鏈枃浠訛紝鏂囦歡鍚嶆病鏈夌壒孌婅姹傦紝鍐呭涓洪渶瑕佸啓鍏AR鐨刴anifest鏂囦歡鍐呭銆傚叾浠栫殑璺熷垱寤篔AR鏂囦歡涓鏍楓?/p>
銆銆鏇存柊JAR鏂囦歡
銆銆jar uf jar-file input-file(s)
銆銆褰搃nput-file(s)璺烰AR鏂囦歡涓師鏈夌殑鏂囦歡鍚屽悕鏃訛紝鍒欒鐩栨帀鍘熸潵鐨勬枃浠躲傚鏋滄病鏈夛紝鍒欐坊鍔犵浉搴旀枃浠躲?/p>
銆銆娣誨姞淇敼Manifest鏂囦歡鐨勫懡浠ら夐」鍚庯紝涔熷彲浠ュ疄鐜板manifest鐨勬洿鏂般?/p>
銆銆jar umf manifest jar-file娉ㄦ剰鍏朵腑manifest涓簍xt鏂囦歡錛屽唴瀹規(guī)槸闇瑕佹洿鏂扮殑manifest鏂囦歡鍐呭銆俲ar-file鍒欎負瀵瑰簲鐨凧AR鏂囦歡銆?/p>
銆銆Running JAR-Packaged Software
銆銆java -jar jar-file
銆銆浠ヤ笂鍛戒護鎵ц鐨勬潯浠舵槸 JAR鐨凪anifest鏂囦歡涓叿鏈?Main-Class錛?鏍囪銆傝繖涓爣璁版爣鏄庝簡鏁翠釜JAR涓虹浉搴旂殑涓葷被鏈嶅姟錛岃繖涓富綾諱腑蹇呴』鍚湁static main 紼嬪簭鍏ュ彛銆?/p>
銆銆鐞嗚ВManifest鏂囦歡
銆銆JAR鏂囦歡鑳藉鏀寔璁稿鍔熻兘錛屽寘鎷數(shù)瀛愮鍚嶏紝鐗堟湰鎺у埗錛屽寘鍔犲瘑錛屾墿灞曠瓑絳夈傝繖浜涢兘鏄痬anifest鏂囦歡鐨勫姛鍔?
銆銆manifest鏄竴涓壒孌婄殑鏂囨湰鏂囦歡錛孞AR鏂囦歡鍖呬腑鎵鏈夋枃浠剁殑淇℃伅閮藉彲浠ュ寘鍚湪鍏朵腑銆傞氳繃鍦╩anifest涓緗笉鍚岀殑鍊鹼紝浣犺兘緇橨AR鍖呭娣誨悇縐嶄笉鍚岀殑鐗規(guī)畩鐢ㄩ斻?/p>
銆銆鍦ㄦ垜浠湅鍚勭涓嶅悓鐨勭敤閫斾箣鍓嶏紝鍏堢湅鐪媘anifest鐨勯粯璁ゅ唴瀹癸細鏂囦歡鐨勯粯璁よ礬寰勬槸
銆銆META-INF/MANIFEST.MF榛樿鍐呭鏄?/p>
銆銆Manifest-Version錛?1.0榪欎竴琛屽睍紺轟簡manifest鐨勫熀鏈殑鏍煎紡錛氶敭鍊煎銆傞敭鍜屽肩敤"錛?鍒嗗紑銆傞粯璁anifest涓睍紺轟簡鐗堟湰鍙楓?/p>
銆銆Manifest-Version錛?1.0
銆銆Name錛?java/math/BigDecimal.class
銆銆SHA1-Digest錛?TD1GZt8G11dXY2p4olSZPc5Rj64=
銆銆MD5-Digest錛?z6z8xPj2AW/Q9AKRSF0cg==
銆銆Name錛?span class="Apple-converted-space"> java/math/BigInteger/class
銆銆SHA1-Digest錛歰B1GZt8G11dXY2p4olSZPc5Rj64=
銆銆MD5-Digest錛?z6z8xPj2AW/8HAKRSF0cg==
銆銆榪欓噷灞曠ず浜咼AR鏂囦歡涓紝涓嶅悓銆俢lass鏂囦歡鐨勪笉鍚屽睘鎬с侼ame鏍囪浜嗕笉鍚岀殑瀛愭枃浠訛紝涔嬪悗鐨凷HA1_Digest鍒欐槸瀵瑰簲鏂囦歡鐨勫睘鎬с?/p>
銆銆Main-Class錛?classname Mani-Class閿爣璁頒簡鏁翠釜JAR鏂囦歡榪愯鐨勪富綾匯傚嵆鏁翠釜JAR浣滀負涓涓簲鐢ㄨ繍琛屾椂鐨勭▼搴忓叆鍙c?/p>
銆銆Class-Path錛?servlet.jar infobus.jar acme/beans.jar Class-Path閿爣璁頒簡闇瑕佷笅杞界殑鎵╁睍鍖呫?/p>
鏈榪戞兂灝?strong>Java錛?a style="color: rgb(11,59,140); font-size: 12px; text-decoration: underline" target="_blank">Java鏁欑▼ Java鍩硅 錛?/strong>鍩虹鐨勪竴浜涗笢瑗塊兘鏁寸悊鏁寸悊錛屽啓涓嬫潵錛岃繖鏄鐭ヨ瘑鐨勬葷粨錛屼篃鏄竴縐嶄箰瓚c傚凡緇忔嫙濂戒簡鎻愮翰錛屽ぇ姒傚垎涓鴻繖鍑犱釜涓婚錛?java綰跨▼瀹夊叏錛宩ava鍨冨溇鏀墮泦錛宩ava騫跺彂鍖呰緇嗕粙緇嶏紝java profile鍜宩vm鎬ц兘璋冧紭銆傛參鎱㈠啓鍚с傛湰浜簀ameswxx鍘熷垱鏂囩珷錛岃漿杞借娉ㄦ槑鍑哄錛屾垜璐逛簡寰堝蹇冭錛屽璋簡銆傚叧浜巎ava綰跨▼瀹夊叏錛岀綉涓婃湁寰堝璧勬枡錛屾垜鍙兂浠庤嚜宸辯殑瑙掑害鎬葷粨瀵硅繖鏂歸潰鐨勮冭檻錛屾湁鏃跺欏啓涓滆タ鏄緢鐥涜嫤鐨勶紝鐭ラ亾涓浜涗笢瑗匡紝浣嗘兂鐢ㄦ枃瀛楄娓呮錛屽嵈涓嶆槸閭d箞瀹規(guī)槗銆傛垜璁や負瑕佽璇唈ava綰跨▼瀹夊叏錛屽繀欏諱簡瑙d袱涓富瑕佺殑鐐癸細java鐨勫唴瀛樻ā鍨嬶紝java鐨勭嚎紼嬪悓姝ユ満鍒躲傜壒鍒槸鍐呭瓨妯″瀷錛宩ava鐨勭嚎紼嬪悓姝ユ満鍒跺緢澶х▼搴︿笂閮芥槸鍩轟簬鍐呭瓨妯″瀷鑰岃瀹氱殑銆傚悗闈㈡垜榪樹細鍐檍ava騫跺彂鍖呯殑鏂囩珷錛岃緇嗘葷粨濡備綍鍒╃敤java騫跺彂鍖呯紪鍐欓珮鏁堝畨鍏ㄧ殑澶氱嚎紼嬪茍鍙戠▼搴忋傛殏鏃跺啓寰楁瘮杈冧粨淇冿紝鍚庨潰浼氭參鎱㈣ˉ鍏呭畬鍠勩?/p>
銆銆嫻呰皥java鍐呭瓨妯″瀷
銆銆涓嶅悓鐨勫鉤鍙幫紝鍐呭瓨妯″瀷鏄笉涓鏍風殑錛屼絾鏄痡vm鐨勫唴瀛樻ā鍨嬭鑼冩槸緇熶竴鐨勩傚叾瀹瀓ava鐨勫綰跨▼騫跺彂闂鏈緇堥兘浼氬弽鏄犲湪java鐨勫唴瀛樻ā鍨嬩笂錛屾墍璋撶嚎紼嬪畨鍏ㄦ棤闈炴槸瑕佹帶鍒跺涓嚎紼嬪鏌愪釜璧勬簮鐨勬湁搴忚闂垨淇敼銆傛葷粨java鐨勫唴瀛樻ā鍨嬶紝瑕佽В鍐充袱涓富瑕佺殑闂錛氬彲瑙佹у拰鏈夊簭鎬с傛垜浠兘鐭ラ亾璁$畻鏈烘湁楂橀熺紦瀛樼殑瀛樺湪錛屽鐞嗗櫒騫朵笉鏄瘡嬈″鐞嗘暟鎹兘鏄彇鍐呭瓨鐨勩侸VM瀹氫箟浜嗚嚜宸辯殑鍐呭瓨妯″瀷錛屽睆钄戒簡搴曞眰騫沖彴鍐呭瓨綆$悊緇嗚妭錛屽浜巎ava寮鍙戜漢鍛橈紝瑕佹竻妤氬湪jvm鍐呭瓨妯″瀷鐨勫熀紜涓婏紝濡傛灉瑙e喅澶氱嚎紼嬬殑鍙鎬у拰鏈夊簭鎬с?/p>
銆銆閭d箞錛屼綍璋撳彲瑙佹?澶氫釜綰跨▼涔嬮棿鏄笉鑳戒簰鐩鎬紶閫掓暟鎹氫俊鐨勶紝瀹冧滑涔嬮棿鐨勬矡閫氬彧鑳介氳繃鍏變韓鍙橀噺鏉ヨ繘琛屻侸ava鍐呭瓨妯″瀷(JMM)瑙勫畾浜唈vm鏈変富鍐呭瓨錛屼富鍐呭瓨鏄涓嚎紼嬪叡浜殑銆傚綋new涓涓璞$殑鏃跺欙紝涔熸槸琚垎閰嶅湪涓誨唴瀛樹腑錛屾瘡涓嚎紼嬮兘鏈夎嚜宸辯殑宸ヤ綔鍐呭瓨錛屽伐浣滃唴瀛樺瓨鍌ㄤ簡涓誨瓨鐨勬煇浜涘璞$殑鍓湰錛屽綋鐒剁嚎紼嬬殑宸ヤ綔鍐呭瓨澶у皬鏄湁闄愬埗鐨勩傚綋綰跨▼鎿嶄綔鏌愪釜瀵硅薄鏃訛紝鎵ц欏哄簭濡備笅錛?/p>
銆銆(1)浠庝富瀛樺鍒跺彉閲忓埌褰撳墠宸ヤ綔鍐呭瓨(read and load)
銆銆(2)鎵ц浠g爜錛屾敼鍙樺叡浜彉閲忓?use and assign)
銆銆(3)鐢ㄥ伐浣滃唴瀛樻暟鎹埛鏂頒富瀛樼浉鍏沖唴瀹?store and write)
銆銆JVM瑙勮寖瀹氫箟浜嗙嚎紼嬪涓誨瓨鐨勬搷浣滄寚浠わ細read錛宭oad錛寀se錛宎ssign錛宻tore錛寃rite.褰撲竴涓叡浜彉閲忓湪澶氫釜綰跨▼鐨勫伐浣滃唴瀛樹腑閮芥湁鍓湰鏃訛紝濡傛灉涓涓嚎紼嬩慨鏀逛簡榪欎釜鍏變韓鍙橀噺錛岄偅涔堝叾浠栫嚎紼嬪簲璇ヨ兘澶熺湅鍒拌繖涓淇敼鍚庣殑鍊鹼紝榪欏氨鏄綰跨▼鐨勫彲瑙佹ч棶棰樸?/p>
銆銆閭d箞錛屼粈涔堟槸鏈夊簭鎬у憿?綰跨▼鍦ㄥ紩鐢ㄥ彉閲忔椂涓嶈兘鐩存帴浠庝富鍐呭瓨涓紩鐢紝濡傛灉綰跨▼宸ヤ綔鍐呭瓨涓病鏈夎鍙橀噺錛屽垯浼氫粠涓誨唴瀛樹腑鎷瘋礉涓涓壇鏈埌宸ヤ綔鍐呭瓨涓紝榪欎釜榪囩▼涓簉ead-load錛屽畬鎴愬悗綰跨▼浼氬紩鐢ㄨ鍓湰銆傚綋鍚屼竴綰跨▼鍐嶅害寮曠敤璇ュ瓧孌墊椂錛屾湁鍙兘閲嶆柊浠庝富瀛樹腑鑾峰彇鍙橀噺鍓湰(read-load-use)錛屼篃鏈夊彲鑳界洿鎺ュ紩鐢ㄥ師鏉ョ殑鍓湰(use)錛屼篃灝辨槸璇?read錛宭oad錛寀se欏哄簭鍙互鐢盝VM瀹炵幇緋葷粺鍐沖畾銆?/p>
銆銆綰跨▼涓嶈兘鐩存帴涓轟富瀛樹腑涓瓧孌佃祴鍊鹼紝瀹冧細灝嗗兼寚瀹氱粰宸ヤ綔鍐呭瓨涓殑鍙橀噺鍓湰(assign)錛屽畬鎴愬悗榪欎釜鍙橀噺鍓湰浼氬悓姝ュ埌涓誨瓨鍌ㄥ尯(store-write)錛岃嚦浜庝綍鏃跺悓姝ヨ繃鍘伙紝鏍規(guī)嵁JVM瀹炵幇緋葷粺鍐沖畾銆傛湁璇ュ瓧孌碉紝鍒欎細浠庝富鍐呭瓨涓皢璇ュ瓧孌佃祴鍊煎埌宸ヤ綔鍐呭瓨涓紝榪欎釜榪囩▼涓簉ead-load錛屽畬鎴愬悗綰跨▼浼氬紩鐢ㄨ鍙橀噺鍓湰錛屽綋鍚屼竴綰跨▼澶氭閲嶅瀵瑰瓧孌佃祴鍊兼椂錛屾瘮濡傦細
銆銆Java浠g爜
銆銆for(int i=0;i<10;i++)
銆銆a++;綰跨▼鏈夊彲鑳藉彧瀵瑰伐浣滃唴瀛樹腑鐨勫壇鏈繘琛岃祴鍊鹼紝鍙埌鏈鍚庝竴嬈¤祴鍊煎悗鎵嶅悓姝ュ埌涓誨瓨鍌ㄥ尯錛屾墍浠ssign錛宻tore錛寃eite欏哄簭鍙互鐢盝VM瀹炵幇緋葷粺鍐沖畾銆傚亣璁炬湁涓涓叡浜彉閲弜錛岀嚎紼媋鎵цx=x+1.浠庝笂闈㈢殑鎻忚堪涓彲浠ョ煡閬搙=x+1騫朵笉鏄竴涓師瀛愭搷浣滐紝瀹冪殑鎵ц榪囩▼濡備笅錛?/p>
銆銆1銆佷粠涓誨瓨涓鍙栧彉閲弜鍓湰鍒板伐浣滃唴瀛?銆佺粰x鍔? 3銆佸皢x鍔?鍚庣殑鍊煎啓鍥炰富 瀛?/p>
銆銆濡傛灉鍙﹀涓涓嚎紼媌鎵цx=x-1錛屾墽琛岃繃紼嬪涓嬶細
銆銆1銆佷粠涓誨瓨涓鍙栧彉閲弜鍓湰鍒板伐浣滃唴瀛?銆佺粰x鍑? 3銆佸皢x鍑?鍚庣殑鍊煎啓鍥炰富瀛?/p>
銆銆閭d箞鏄劇劧錛屾渶緇堢殑x鐨勫兼槸涓嶅彲闈犵殑銆傚亣璁緓鐜板湪涓?0錛岀嚎紼媋鍔?錛岀嚎紼媌鍑?錛屼粠琛ㄩ潰涓婄湅錛屼技涔庢渶緇坸榪樻槸涓?0錛屼絾鏄綰跨▼鎯呭喌涓嬩細鏈夎繖縐嶆儏鍐靛彂鐢燂細
銆銆1錛氱嚎紼媋浠庝富瀛樿鍙杧鍓湰鍒板伐浣滃唴瀛橈紝宸ヤ綔鍐呭瓨涓瓁鍊間負10 2錛氱嚎紼媌浠庝富瀛樿鍙杧鍓湰鍒板伐浣滃唴瀛橈紝宸ヤ綔鍐呭瓨涓瓁鍊間負10 3錛氱嚎紼媋灝嗗伐浣滃唴瀛樹腑x鍔?錛屽伐浣滃唴瀛樹腑x鍊間負11 4錛氱嚎紼媋灝唜鎻愪氦涓誨瓨涓紝涓誨瓨涓瓁涓?1 5錛氱嚎紼媌灝嗗伐浣滃唴瀛樹腑x鍊煎噺1錛屽伐浣滃唴瀛樹腑x鍊間負9 6錛氱嚎紼媌灝唜鎻愪氦鍒頒腑涓誨瓨涓紝涓誨瓨涓瓁涓?
銆銆鍚屾牱錛寈鏈夊彲鑳戒負11錛屽鏋渪鏄竴涓摱琛岃處鎴鳳紝綰跨▼a瀛樻錛岀嚎紼媌鎵f錛屾樉鐒惰繖鏍鋒槸鏈変弗閲嶉棶棰樼殑錛岃瑙e喅榪欎釜闂錛屽繀欏諱繚璇佺嚎紼媋鍜岀嚎紼媌鏄湁搴忔墽琛岀殑錛屽茍涓旀瘡涓嚎紼嬫墽琛岀殑鍔?鎴栧噺1鏄竴涓師瀛愭搷浣溿傜湅鐪嬩笅闈唬鐮侊細
銆銆Java浠g爜
銆銆public class Account {
銆銆private int balance;
銆銆public Account(int balance) { this.balance = balance;}
銆銆public int getBalance() { return balance;}
銆銆public void add(int num) { balance = balance + num;}
銆銆public void withdraw(int num) { balance = balance - num;}
銆銆public static void main(String[] args) throws InterruptedException { Account account = new Account(1000);Thread a = new Thread(new AddThread(account錛?20)錛?"add");Thread b = new Thread(new WithdrawThread(account錛?20)錛?"withdraw");a.start();b.start();a.join();b.join();System.out.println(account.getBalance());}
銆銆static class AddThread implements Runnable { Account account;int amount;
銆銆public AddThread(Account account錛?int amount) { this.account = account;this.amount = amount;}
銆銆public void run() { for (int i = 0; i < 200000; i++) { account.add(amount);}
銆銆static class WithdrawThread implements Runnable { Account account;int amount;
銆銆public WithdrawThread(Account account錛?int amount) { this.account = account;this.amount = amount;}
銆銆public void run() { for (int i = 0; i < 100000; i++) { account.withdraw(amount);}絎竴嬈℃墽琛岀粨鏋滀負10200錛岀浜屾鎵ц緇撴灉涓?060錛屾瘡嬈℃墽琛岀殑緇撴灉閮芥槸涓嶇‘瀹氱殑錛屽洜涓虹嚎紼嬬殑鎵ц欏哄簭鏄笉鍙瑙佺殑銆傝繖鏄痡ava鍚屾浜х敓鐨勬牴婧愶紝synchronized鍏抽敭瀛椾繚璇佷簡澶氫釜綰跨▼瀵逛簬鍚屾鍧楁槸浜掓枼鐨勶紝synchronized浣滀負涓縐嶅悓姝ユ墜孌碉紝瑙e喅java澶氱嚎紼嬬殑鎵ц鏈夊簭鎬у拰鍐呭瓨鍙鎬э紝鑰寁olatile鍏抽敭瀛椾箣瑙e喅澶氱嚎紼嬬殑鍐呭瓨鍙鎬ч棶棰樸傚悗闈㈠皢浼氳緇嗕粙緇嶃?/p>
銆銆鍦↗ava涓紝紼嬪簭鍛橀渶瑕侀氳繃鍏抽敭瀛梟ew涓烘瘡涓璞$敵璇峰唴瀛樼┖闂?(鍩烘湰綾誨瀷闄ゅ)錛屾墍鏈夌殑瀵硅薄閮藉湪鍫?(Heap)涓垎閰嶇┖闂淬?/p>
銆銆瀵硅薄鐨勯噴鏀炬槸鐢盙C鍐沖畾鍜屾墽琛岀殑銆?/p>
銆銆鍦↗ava涓紝鍐呭瓨鐨勫垎閰嶆槸鐢辯▼搴忓畬鎴愮殑錛岃屽唴瀛樼殑閲婃斁鏄湁GC瀹屾垚鐨勶紝榪欑鏀舵敮涓ゆ潯綰跨殑鏂規(guī)硶綆鍖栦簡紼嬪簭鍛樼殑宸ヤ綔銆備絾涔熷姞閲嶄簡JVM鐨勫伐浣溿傝繖涔熸槸Java紼嬪簭榪愯閫熷害杈冩參鐨勫師鍥犱箣涓銆?/p>
銆銆GC閲婃斁絀洪棿鏂規(guī)硶錛氱洃鎺ф瘡涓涓璞$殑榪愯鐘舵侊紝鍖呮嫭瀵硅薄鐨勭敵璇楓佸紩鐢ㄣ佽寮曠敤銆佽祴鍊肩瓑銆傚綋璇ュ璞′笉鍐嶈寮曠敤鏃訛紝閲婃斁瀵硅薄銆?/p>
銆銆2銆佸唴瀛樼鐞嗙粨鏋凧ava浣跨敤鏈夊悜鍥劇殑鏂瑰紡榪涜鍐呭瓨綆$悊錛屽浜庣▼搴忕殑姣忎竴涓椂鍒伙紝鎴戜滑閮芥湁涓涓湁鍚戝浘琛ㄧずJVM鐨勫唴瀛樺垎閰嶆儏鍐點?/p>
銆銆灝嗗璞¤冭檻涓烘湁鍚戝浘鐨勯《鐐癸紝灝嗗紩鐢ㄥ叧緋昏冭檻涓哄浘鐨勬湁鍚戣竟錛屾湁鍚戣竟浠庡紩鐢ㄨ呮寚鍚戣寮曞璞°傚彟澶栵紝姣忎釜綰跨▼瀵硅薄鍙互浣滀負涓涓浘鐨勮搗濮嬮《鐐癸紝渚嬪澶у紼嬪簭浠巑ain榪涚▼寮濮嬫墽琛岋紝閭d箞璇ュ浘灝辨槸浠ain榪涚▼欏剁偣寮濮嬬殑涓媯墊牴鏍戙傚湪榪欎釜鏈夊悜鍥句腑錛屾牴欏剁偣鍙揪鐨勫璞¢兘鏄湁鏁堝璞★紝GC灝嗕笉鍥炴敹榪欎簺瀵硅薄銆傚鏋滄煇涓璞?(榪為氬瓙鍥?涓庤繖涓牴欏剁偣涓嶅彲杈?娉ㄦ剰錛岃鍥句負鏈夊悜鍥?錛岄偅涔堟垜浠涓鴻繖涓?榪欎簺)瀵硅薄涓嶅啀琚紩鐢紝鍙互琚獹C鍥炴敹銆?/p>
銆銆3銆佷嬌鐢ㄦ湁鍚戝浘鏂瑰紡綆$悊鍐呭瓨鐨勪紭緙虹偣Java浣跨敤鏈夊悜鍥劇殑鏂瑰紡榪涜鍐呭瓨綆$悊錛屽彲浠ユ秷闄ゅ紩鐢ㄥ驚鐜殑闂錛屼緥濡傛湁涓変釜瀵硅薄錛岀浉浜掑紩鐢紝鍙瀹冧滑鍜屾牴榪涚▼涓嶅彲杈劇殑錛岄偅涔圙C涔熸槸鍙互鍥炴敹瀹冧滑鐨勩?/p>
銆銆榪欑鏂瑰紡鐨勪紭鐐規(guī)槸綆$悊鍐呭瓨鐨勭簿搴﹀緢楂橈紝浣嗘槸鏁堢巼杈冧綆銆?/p>
銆銆鍙﹀涓縐嶅父鐢ㄧ殑鍐呭瓨綆$悊鎶鏈槸浣跨敤璁℃暟鍣紝渚嬪COM妯″瀷閲囩敤璁℃暟鍣ㄦ柟寮忕鐞嗘瀯浠訛紝瀹冧笌鏈夊悜鍥劇浉姣旓紝綺懼害琛屼綆(寰堥毦澶勭悊寰幆寮曠敤鐨勯棶棰?錛屼絾鎵ц鏁堢巼寰堥珮銆?/p>
銆銆★ Java鐨勫唴瀛樻硠闇睯ava铏界劧鐢盙C鏉ュ洖鏀跺唴瀛橈紝浣嗕篃鏄瓨鍦ㄦ硠闇查棶棰樼殑錛屽彧鏄瘮C++灝忎竴鐐廣?/p>
銆銆1銆佷笌C++鐨勬瘮杈僣++鎵鏈夊璞$殑鍒嗛厤鍜屽洖鏀墮兘闇瑕佺敱鐢ㄦ埛鏉ョ鐞嗐傚嵆闇瑕佺鐞嗙偣錛屼篃闇瑕佺鐞嗚竟銆傝嫢瀛樺湪涓嶅彲杈劇殑鐐癸紝鏃犳硶鍦ㄥ洖鏀跺垎閰嶇粰閭d釜鐐圭殑鍐呭瓨錛屽鑷村唴瀛樻硠闇層傚瓨鍦ㄦ棤鐢ㄧ殑瀵硅薄寮曠敤錛岃嚜鐒朵篃浼氬鑷村唴瀛樻硠闇層?/p>
銆銆Java鐢盙C鏉ョ鐞嗗唴瀛樺洖鏀訛紝GC灝嗗洖鏀朵笉鍙揪鐨勫璞″崰鐢ㄧ殑鍐呭瓨絀洪棿銆傛墍浠ワ紝Java闇瑕佽冭檻鐨勫唴瀛樻硠闇查棶棰樹富瑕佹槸閭d簺琚紩鐢ㄤ絾鏃犵敤鐨勫璞?#8212;—鍗蟲寚瑕佺鐞嗚竟灝卞彲浠ャ傝寮曠敤浣嗘棤鐢ㄧ殑瀵硅薄錛岀▼搴忓紩鐢ㄤ簡璇ュ璞★紝浣嗗悗緇笉浼氬啀浣跨敤瀹冦傚畠鍗犵敤鐨勫唴瀛樼┖闂村氨嫻垂浜嗐?/p>
銆銆濡傛灉瀛樺湪瀵硅薄鐨勫紩鐢紝榪欎釜瀵硅薄灝辮瀹氫箟涓?#8220;媧誨姩鐨?#8221;錛屽悓鏃朵笉浼氳閲婃斁銆?/p>
銆銆2銆丣ava鍐呭瓨娉勯湶澶勭悊澶勭悊Java鐨勫唴瀛樻硠闇查棶棰橈細紜璇ュ璞′笉鍐嶄細琚嬌鐢ㄣ?/p>
銆銆鍏稿瀷鐨勫仛娉?#8212;—鎶婂璞℃暟鎹垚鍛樿涓簄ull浠庨泦鍚堜腑縐婚櫎璇ュ璞℃敞鎰忥紝褰撳眬閮ㄥ彉閲忎笉闇瑕佹椂錛屼笉闇鏄庢樉鐨勮涓簄ull錛屽洜涓轟竴涓柟娉曟墽琛屽畬姣曟椂錛岃繖浜涘紩鐢ㄤ細鑷姩琚竻鐞嗐?/p>
銆銆渚嬪瓙錛歷iew plainList myList=new ArrayList();for (int i=1;i<100; i++)
銆銆{ Object o=new Object();myList.add(o);o=null;} //姝ゆ椂錛屾墍鏈夌殑Object瀵硅薄閮芥病鏈夎閲婃斁錛屽洜涓哄彉閲弇yList寮曠敤榪欎簺瀵硅薄銆?/p>
銆銆褰搈yList鍚庢潵涓嶅啀鐢ㄥ埌錛屽皢涔嬭涓簄ull錛岄噴鏀炬墍鏈夊畠寮曠敤鐨勫璞°備箣鍚嶨C渚夸細鍥炴敹榪欎簺瀵硅薄鍗犵敤鐨勫唴瀛樸?/p>
銆銆★ 瀵笹C鎿嶄綔瀵笹C鐨勬搷浣滃茍涓嶄竴瀹氳兘杈懼埌綆$悊鍐呭瓨鐨勬晥鏋溿?/p>
銆銆GC瀵逛簬紼嬪簭鍛樻潵璇村熀鏈槸閫忔槑鐨勶紝涓嶅彲瑙佺殑銆傛垜浠彧鏈夊嚑涓嚱鏁板彲浠ヨ闂瓽C錛屼緥濡傝繍琛孏C鐨勫嚱鏁癝ystem.gc()錛孲ystem.銆?/p>
銆銆浣嗘槸鏍規(guī)嵁Java璇█瑙勮寖瀹氫箟錛?System.gc()鍑芥暟涓嶄繚璇丣VM鐨勫瀮鍦炬敹闆嗗櫒涓瀹氫細鎵ц銆傚洜涓猴紝涓嶅悓鐨凧VM瀹炵幇鑰呭彲鑳戒嬌鐢ㄤ笉鍚岀殑綆楁硶綆$悊GC.閫氬父錛孏C鐨勭嚎紼嬬殑浼樺厛綰у埆杈冧綆銆?/p>
銆銆JVM璋冪敤GC鐨勭瓥鐣ユ湁寰堝縐嶏紝鏈夌殑鏄唴瀛樹嬌鐢ㄥ埌杈句竴瀹氱▼搴︽椂錛孏C鎵嶅紑濮嬪伐浣滐紝涔熸湁瀹氭椂鎵ц鐨勶紝鏈夌殑鏄鉤緙撴墽琛孏C錛屾湁鐨勬槸涓柇寮忔墽琛孏C.浣嗛氬父鏉ヨ錛屾垜浠笉闇瑕佸叧蹇冭繖浜涖傞櫎闈炲湪涓浜涚壒瀹氱殑鍦哄悎錛孏C鐨勬墽琛屽獎鍝嶅簲鐢ㄧ▼搴忕殑鎬ц兘錛屼緥濡傚浜庡熀浜嶹eb鐨勫疄鏃剁郴緇燂紝濡傜綉緇滄父鎴忕瓑錛岀敤鎴蜂笉甯屾湜GC紿佺劧涓柇搴旂敤紼嬪簭鎵ц鑰岃繘琛屽瀮鍦懼洖鏀訛紝閭d箞鎴戜滑闇瑕佽皟鏁碐C鐨勫弬鏁幫紝璁〨C鑳藉閫氳繃騫崇紦鐨勬柟寮忛噴鏀懼唴瀛橈紝渚嬪灝嗗瀮鍦懼洖鏀跺垎瑙d負涓緋誨垪鐨勫皬姝ラ鎵ц錛孲un鎻愪緵鐨凥otSpot JVM灝辨敮鎸佽繖涓鐗規(guī)с?/p>
銆銆★ 鍐呭瓨娉勯湶媯嫻嬪競鍦轟笂宸叉湁鍑犵涓撲笟媯鏌?strong>Java鍐呭瓨娉勬紡鐨勫伐鍏鳳紝瀹冧滑鐨勫熀鏈伐浣滃師鐞嗗ぇ鍚屽皬寮傦紝閮芥槸閫氳繃鐩戞祴Java紼嬪簭榪愯鏃訛紝鎵鏈夊璞$殑鐢寵銆侀噴鏀劇瓑鍔ㄤ綔錛屽皢鍐呭瓨綆$悊鐨勬墍鏈変俊鎭繘琛岀粺璁°佸垎鏋愩佸彲瑙嗗寲銆傚紑鍙戜漢鍛樺皢鏍規(guī)嵁榪欎簺淇℃伅鍒ゆ柇紼嬪簭鏄惁鏈夊唴瀛樻硠婕忛棶棰樸傝繖浜涘伐鍏峰寘鎷琌ptimizeit Profiler錛孞Probe Profiler錛孞inSight 錛?Rational 鍏徃鐨凱urify絳夈?/p>
銆銆鍦ㄨ繍琛岃繃紼嬩腑錛屾垜浠彲浠ラ殢鏃惰瀵熷唴瀛樼殑浣跨敤鎯呭喌錛岄氳繃榪欑鏂瑰紡錛屾垜浠彲浠ュ緢蹇壘鍒伴偅浜涢暱鏈熶笉琚噴鏀撅紝騫朵笖涓嶅啀浣跨敤鐨勫璞°傛垜浠氳繃媯鏌ヨ繖浜涘璞$殑鐢熷瓨鍛ㄦ湡錛岀‘璁ゅ叾鏄惁涓哄唴瀛樻硠闇層?/p>
銆銆★ 杞紩鐢ㄧ壒鐐癸細鍙湁褰撳唴瀛樹笉澶熺殑鏃跺欐墠鍥炴敹榪欑被鍐呭瓨錛屽悓鏃跺張淇濊瘉鍦↗ava鎶涘嚭OutOfMemory寮傚父涔嬪墠錛岃璁劇疆涓簄ull.淇濊瘉鏈澶ч檺搴︾殑浣跨敤鍐呭瓨鑰屼笉寮曡搗OutOfMemory寮傚父銆?/p>
銆銆鍦ㄦ煇浜涙椂鍊欏杞紩鐢ㄧ殑浣跨敤浼氶檷浣庡簲鐢ㄧ殑榪愯鏁堢巼涓庢ц兘錛屼緥濡傦細搴旂敤杞紩鐢ㄧ殑瀵硅薄鐨勫垵濮嬪寲榪囩▼杈冧負鑰楁椂錛屾垨鑰呭璞$殑鐘舵佸湪紼嬪簭鐨勮繍琛岃繃紼嬩腑鍙戠敓浜嗗彉鍖栵紝閮戒細緇欓噸鏂板垱寤哄璞′笌鍒濆鍖栧璞″甫鏉ヤ笉鍚岀▼搴︾殑楹葷儲銆?/p>
銆銆鐢ㄩ旓細鍙互鐢ㄤ簬瀹炵幇涓浜涘父鐢ㄨ祫婧愮殑緙撳瓨錛屽疄鐜癈ache鐨勫姛鑳藉鐞嗕竴浜涘崰鐢ㄥ唴瀛樺ぇ鑰屼笖澹版槑鍛ㄦ湡杈冮暱錛屼絾浣跨敤騫朵笉棰戠箒鐨勫璞℃椂搴斿敖閲忓簲鐢ㄨ鎶鏈?#9733; java紼嬪簭璁捐涓湁鍏沖唴瀛樼鐞嗙殑緇忛獙1.鏈鍩烘湰鐨勫緩璁槸灝芥棭閲婃斁鏃犵敤瀵硅薄鐨勫紩鐢ㄣ傚錛歷iew plain……
銆銆A a = new A();//搴旂敤a瀵硅薄a = null; //褰撲嬌鐢ㄥ璞涔嬪悗涓誨姩灝嗗叾璁劇疆涓虹┖…銆?/p>
銆銆娉細濡傛灉a 鏄柟娉曠殑榪斿洖鍊鹼紝涓嶈鍋氳繖鏍風殑澶勭悊錛屽惁鍒欎綘浠庤鏂規(guī)硶涓緱鍒扮殑榪斿洖鍊兼案榪滀負絀猴紝鑰屼笖榪欑閿欒涓嶆槗琚彂鐜般佹帓闄?.灝介噺灝戠敤finalize鍑芥暟銆傚畠浼氬姞澶C鐨勫伐浣滈噺銆?/p>
銆銆3.濡傛灉闇瑕佷嬌鐢ㄧ粡甯哥敤鍒扮殑鍥劇墖錛屽彲浠ヤ嬌鐢╯oft搴旂敤綾誨瀷銆傚畠?yōu)鍙兘鎶婂泟囦繚瀛樺湪鍐呭瓨涓?.娉ㄦ剰闆嗗悎鏁版嵁綾誨瀷錛屽寘鎷暟緇勩佹爲銆佸浘銆侀摼琛ㄧ瓑鏁版嵁緇撴瀯錛岃繖浜涙暟鎹粨鏋勫GC鏉ヨ錛屽洖鏀舵洿涓哄鏉傘?/p>
銆銆5.灝介噺閬垮厤鍦ㄧ被鐨勯粯璁ゆ瀯閫犲櫒涓垱寤恒佸垵濮嬪寲澶ч噺鐨勫璞★紝闃叉鍦ㄨ皟鐢ㄥ叾鑷被鐨勬瀯閫犲櫒鏃墮犳垚涓嶅繀瑕佺殑鍐呭瓨璧勬簮嫻垂6.灝介噺閬垮厤寮哄埗緋葷粺鍋氬瀮鍦懼唴瀛樼殑鍥炴敹錛屽闀跨郴緇熷仛鍨冨溇鍥炴敹鐨勬渶緇堟椂闂?.灝介噺閬垮厤鏄懼紡鐢寵鏁扮粍絀洪棿8.灝介噺鍋氳繙紼嬫柟娉曡皟鐢ㄧ被搴旂敤寮鍙戞椂浣跨敤鐬棿鍊煎彉閲忥紝闄ら潪榪滅▼璋冪敤绔渶瑕佽幏鍙栬鐬棿鍊煎彉閲忕殑鍊箋?/p>
銆銆9.灝介噺鍦ㄥ悎閫傜殑鍦烘櫙涓嬩嬌鐢ㄥ璞℃睜鎶鏈互鎻愰珮緋葷粺鎬ц兘銆?/p>
銆銆Class.forName(“oracle.jdbc.driver.OracleDriver”).newInstance();
銆銆String url=“jdbc:oracle:thin錛欯localhost:1521:orcl”; //orcl涓烘暟鎹簱鐨凷ID
銆銆String user=“test”;
銆銆String password=“test”;
銆銆Connection conn= DriverManager.getConnection(url錛寀ser錛宲assword);
銆銆2銆丏B2鏁版嵁搴?/p>
銆銆Class.forName(“com.ibm.db2.jdbc.app.DB2Driver ”).newInstance();
銆銆String url=“jdbc:db2://localhost:5000/sample”; //sample涓轟綘鐨勬暟鎹簱鍚?/p>
銆銆String user=“admin”;
銆銆String password=“”;
銆銆Connection conn= DriverManager.getConnection(url錛寀ser錛宲assword);
銆銆3銆丼QL Server7.0/2000鏁版嵁搴?/p>
銆銆Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance();
銆銆String url=“jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb”;
銆銆//mydb涓烘暟鎹簱
銆銆String user=“sa”;
銆銆String password=“”;
銆銆Connection conn= DriverManager.getConnection(url錛寀ser錛宲assword);
銆銆4銆丼ybase鏁版嵁搴?/p>
銆銆Class.forName(“com.sybase.jdbc.SybDriver”).newInstance();
銆銆String url =“ jdbc:sybase:Tds:localhost:5007/myDB”;//myDB涓轟綘鐨勬暟鎹簱鍚?/p>
銆銆Properties sysProps = System.getProperties();
銆銆SysProps.put(“user”錛?#8220;userid”);
銆銆SysProps.put(“password”錛?#8220;user_password”);
銆銆Connection conn= DriverManager.getConnection(url錛?SysProps);
銆銆5銆両nformix鏁版嵁搴?/p>
銆銆Class.forName(“com.informix.jdbc.IfxDriver”).newInstance();
銆銆String url = “jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
銆銆user=testuser;password=testpassword”; //myDB涓烘暟鎹簱鍚?/p>
銆銆Connection conn= DriverManager.getConnection(url);
銆銆6銆丮ySQL鏁版嵁搴?/p>
銆銆Class.forName(“org.gjt.mm.mysql.Driver”).newInstance();
銆銆//鎴栬匔lass.forName(“com.mysql.jdbc.Driver”);
銆銆String url =“jdbc:mysql://localhost/myDB?
銆銆user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1”
銆銆//myDB涓烘暟鎹簱鍚?/p>
銆銆Connection conn= DriverManager.getConnection(url);
銆銆7銆丳ostgreSQL鏁版嵁搴?/p>
銆銆Class.forName(“org.postgresql.Driver”).newInstance();
銆銆String url =“jdbc:postgresql://localhost/myDB” //myDB涓烘暟鎹簱鍚?/p>
銆銆String user=“myuser”;
銆銆String password=“mypassword”;
銆銆Connection conn= DriverManager.getConnection(url錛寀ser錛宲assword);
銆銆8銆乤ccess鏁版嵁搴撶洿榪炵敤ODBC鐨?/p>
銆銆Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) ;
銆銆String url=“jdbc:odbc:Driver={MicroSoft Access Driver
銆銆(*.mdb)};DBQ=”+application.getRealPath(“/Data/ReportDemo.mdb”);
銆銆Connection conn = DriverManager.getConnection(url錛?#8220;”錛?#8220;”);
銆銆Statement stmtNew=conn.createStatement() ;
銆銆import java.awt.Frame;
銆銆import java.awt.Graphics;
銆銆import java.awt.Point;
銆銆import java.awt.event.MouseAdapter;
銆銆import java.awt.event.MouseEvent;
銆銆import java.awt.event.MouseListener;
銆銆import java.util.ArrayList;
銆銆import java.util.Iterator;
銆銆public class MyMouseAdapter {
銆銆public static void main(String[] args) {
銆銆new MyFrame5(“drawing”);
銆銆}
銆銆}
銆銆class MyFrame5 extends Frame{
銆銆ArrayList points=null;
銆銆MyFrame5(String s){
銆銆super(s);
銆銆points=new ArrayList();
銆銆setLayout(null);
銆銆setBounds(300錛?00錛?00錛?00);
銆銆this.setBackground(new Color(204錛?04錛?55));
銆銆setVisible(true);
銆銆this.addMouseListener(new Monitor5());
銆銆}
銆銆public void paint(Graphics g){
銆銆Iterator i=points.iterator();
銆銆while(i.hasNext()){
銆銆Point p=(Point)i.next();
銆銆g.setColor(Color.blue);
銆銆g.fillOval(p.x錛宲.y錛?10錛?10);
銆銆}
銆銆}
銆銆public void addPoint(Point p){
銆銆points.add(p);
銆銆}
銆銆}
銆銆class Monitor5 extends MouseAdapter{ //MouseAdapter瀹炵幇浜哅ouseListener鎺ュ彛
銆銆public void mousePressed(MouseEvent e){
銆銆MyFrame5 f=(MyFrame5)e.getSource();
銆銆f.addPoint(new Point(e.getX()錛宔.getY()));
銆銆f.repaint(); //璁〧rame寮哄埗緇忚閲嶇敾
銆銆}
銆銆}
銆銆浣滅敤浜庢煇涓璞$兢涓悇涓璞$殑鎿嶄綔銆?瀹冨彲浠ヤ嬌浣犲湪涓嶆敼鍙樿繖浜涘璞℃湰韜殑鎯呭喌涓嬶紝瀹氫箟浣滅敤浜庤繖浜涘璞$殑鏂版搷浣溿?/p>
銆銆鍦↗ava錛?a style="color: rgb(11,59,140); font-size: 12px; text-decoration: underline" target="_blank">Java鏁欑▼ Java鍩硅 錛?涓紝Visitor 妯″紡瀹為檯涓婃槸鍒嗙浜哻ollection 緇撴瀯涓殑鍏冪礌鍜屽榪欎簺鍏冪礌榪涜鎿嶄綔鐨勮涓恒?/p>
銆銆涓轟綍浣跨敤Visitor?
銆銆Java 鐨凜ollection(鍖呮嫭Vector 鍜孒ashtable)鏄垜浠渶緇忓父浣跨敤鐨勬妧鏈紝鍙槸Collection濂借薄鏄釜榛戣壊澶ф煋緙革紝鏈潵鏈夊悇縐嶉矞鏄庣被鍨嬬壒寰佺殑瀵硅薄涓鏃︽斁鍏ュ悗錛屽啀鍙栧嚭鏃訛紝榪欎簺綾誨瀷灝辨秷澶變簡銆傞偅涔堟垜浠娍蹇呰鐢↖f 鏉ュ垽鏂紝濡傦細
銆銆Iterator iterator = collection.iterator()
銆銆while (iterator.hasNext()) {
銆銆Object o = iterator.next();
銆銆if (o instanceof Collection)
銆銆messyPrintCollection((Collection)o);
銆銆else if (o instanceof String)
銆銆System.out.println(“‘”+o.toString()+“’”);
銆銆else if (o instanceof Float)
銆銆System.out.println(o.toString()+“f”);
銆銆else
銆銆System.out.println(o.toString());
銆銆}
銆銆鍦ㄤ笂渚嬩腑錛屾垜浠嬌鐢ㄤ簡 instanceof 鏉ュ垽鏂?o 鐨勭被鍨嬨?/p>
銆銆寰堟樉鐒訛紝榪欐牱鍋氱殑緙虹偣浠g爜If else if 寰堢箒鐞愩傛垜浠氨鍙互浣跨敤Visitor 妯″紡瑙e喅瀹冦?/p>
銆銆濡備綍浣跨敤Visitor?
銆銆閽堝涓婁緥錛屾垜浠璁′竴涓帴鍙isitor 璁塊棶鑰咃細
銆銆public interface Visitor
銆銆{
銆銆public void visitCollection(Collection collection);
銆銆public void visitString(String string);
銆銆public void visitFloat(Float float);
銆銆}
銆銆鍦ㄨ繖涓帴鍙d腑錛屽皢鎴戜滑璁や負Collection 鏈夊彲鑳界殑綾葷殑綾誨瀷鏀懼叆鍏朵腑銆?/p>
銆銆鏈変簡璁塊棶鑰咃紝鎴戜滑闇瑕佽璁塊棶鑰咃紝琚闂呭氨鏄垜浠珻ollection 鐨勬瘡涓厓绱燛lement錛屾垜浠涓鴻繖浜汦lement 瀹氫箟涓涓彲浠ユ帴鍙楄闂殑鎺ュ彛(璁塊棶鍜岃璁塊棶鏄簰鍔ㄧ殑錛屽彧鏈夎闂咃紝琚闂呭鏋滆〃紺轟笉嬈㈣繋錛岃闂呭氨涓嶈兘璁塊棶)錛屾垜浠畾涔夎繖涓帴鍙e彨Visitable錛?鐢ㄦ潵瀹氫箟涓涓狝ccept 鎿嶄綔錛屼篃灝辨槸璇磋Collection 姣忎釜鍏冪礌鍏峰鍙闂с?/p>
銆銆public interface Visitable
銆銆{
銆銆public void accept(Visitor visitor);
銆銆}
銆銆濂戒簡錛屾湁浜嗕袱涓帴鍙o紝鎴戜滑灝辮瀹氫箟浠栦滑鐨勫叿浣撳疄鐜?Concrete class)錛?/p>
銆銆public class ConcreteElement implements Visitable
銆銆{
銆銆private String value;
銆銆public ConcreteElement(String string) {
銆銆value = string;
銆銆}
銆銆//瀹氫箟accept 鐨勫叿浣撳唴瀹?榪欓噷鏄緢綆鍗曠殑涓鍙ヨ皟鐢?/p>
銆銆public void accept(Visitor visitor) {
銆銆visitor.visitString(this);
銆銆}
銆銆}
銆銆鍐嶇湅鐪嬭闂呯殑Concrete 瀹炵幇錛?/p>
銆銆public class ConcreteVisitor implements Visitor
銆銆{
銆銆//鍦ㄦ湰鏂規(guī)硶涓紝鎴戜滑瀹炵幇浜嗗Collection 鐨勫厓绱犵殑鎴愬姛璁塊棶
銆銆public void visitCollection(Collection collection) {
銆銆Iterator iterator = collection.iterator()
銆銆while (iterator.hasNext()) {
銆銆Object o = iterator.next();
銆銆if (o instanceof Visitable)
銆銆((Visitable)o).accept(this);
銆銆}
銆銆public void visitString(String string) {
銆銆System.out.println(“‘”+string+“’”);
銆銆}
銆銆public void visitFloat(Float float) {
銆銆System.out.println(float.toString()+“f”);
銆銆}
銆銆}
銆銆}
銆銆鍦ㄤ笂闈㈢殑visitCollection 鎴戜滑瀹炵幇浜嗗Collection 姣忎釜鍏冪礌璁塊棶錛屽彧浣跨敤浜嗕竴涓垽鏂鍙ワ紝鍙鍒ゆ柇鍏舵槸鍚﹀彲浠ヨ闂?/p>
銆銆鑷蟲錛屾垜浠畬鎴愪簡Visitor 妯″紡鍩烘湰鏋舵瀯銆?/p>
銆銆浣跨敤Visitor 妯″紡鐨勫墠鎻?/p>
銆銆瀵硅薄緹ょ粨鏋勪腑(Collection) 涓殑瀵硅薄綾誨瀷寰堝皯鏀瑰彉錛屼篃灝辨槸璇磋闂呯殑韜喚綾誨瀷寰堝皯鏀瑰彉錛屽涓婇潰涓璙isitor 涓殑綾誨瀷寰堝皯鏀瑰彉錛屽鏋滈渶瑕佸鍔犳柊鐨勬搷浣滐紝姣斿涓婁緥涓垜浠湪ConcreteElement 鍏蜂綋瀹炵幇澶栵紝榪橀渶瑕佹柊鐨凜oncreteElement2 ConcreteElement3.
銆銆鍙浣跨敤Visitor 妯″紡鏄湁鍓嶆彁鐨勶紝鍦ㄤ袱涓帴鍙isitor 鍜孷isitable 涓紝紜繚Visitor 寰堝皯鍙樺寲錛屽彉鍖栫殑鏄疺isitable錛岃繖鏍蜂嬌鐢╒isitor 鏈鏂逛究銆?/p>
銆銆濡傛灉Visitor 涔熺粡甯稿彉鍖栵紝 涔熷氨鏄錛屽璞$兢涓殑瀵硅薄綾誨瀷緇忓父鏀瑰彉錛屼竴鑸緩璁槸錛屼笉濡傚湪榪欎簺瀵硅薄綾諱腑閫愪釜瀹氫箟鎿嶄綔銆備絾鏄疛ava 鐨凴eflect 鎶鏈В鍐充簡榪欎釜闂銆?/p>
銆銆Reflect 鎶鏈槸鍦ㄨ繍琛屾湡闂村姩鎬佽幏鍙栧璞$被鍨嬪拰鏂規(guī)硶鐨勪竴縐嶆妧鏈紝鍏蜂綋瀹炵幇鍙傝僇avaworld鐨勮嫳鏂囧師鏂?