1. 主页 > 小妙招

当同事又写出内存泄漏代码时,我终于掏出Java静态方法这个神器

锛堟媿妗屽瓙锛変綘浠湁娌℃湁閬囧埌杩囪繖绉嶇碂蹇冧簨锛熼殧澹佸伐浣嶈€佺帇鍐欑殑宸ュ叿绫伙紝姣忔璋冪敤閮絥ew鏂板璞★紝鎼炲緱鏈嶅姟鍣ㄥ唴瀛樺儚鍧愯繃灞辫溅锛佷笂鍛ㄤ簲鎴戝疄鍦ㄥ繊涓嶄簡锛屾妱璧穝tatic鍏抽敭瀛楃粰浠栫幇鍦烘敼閫狅紝鍐呭瓨鍗犵敤鐩存帴浠?00MB闄嶅埌200MB銆備粖澶╁氨甯︿綘浠湅鐪嬶紝杩欎釜钘忓湪Java宸ュ叿绠遍噷鐨勭憺澹啗鍒€鍒板簳鏈夊鑳芥墦锛?/p>


鍦烘櫙涓€锛氬伐鍏风被鍐欐垚瀵硅薄宸ュ巶锛熸椿璇ヨ杩愮淮杩芥潃锛?/h3>

涓婂懆瀹炰範鐢熷皬鏉庝氦浜嗕釜"绁炰綔"鈥斺€旂敤20涓櫘閫氭柟娉曞啓鐨勬棩鏈熷伐鍏风被銆傛瘡娆¤皟鐢ㄩ兘寰楋細

java澶嶅埗
DateUtils utils = new DateUtils();  
String time = utils.format(new Date());  

鎴戝綋鍦鸿鍘嬪氨涓婃潵浜嗭紒杩欏啓娉曠浉褰撲簬姣忔鐢ㄨ绠楀櫒閮借涔板彴鏂扮殑銆傛敼閫犳垚闈欐€佹柟娉曞悗锛?/p>

java澶嶅埗
// 鐩存帴鐪佹帀new瀵硅薄鐨勬楠?/span>
String time = DateUtils.format(new Date());

鈥?strong>鈥嬩笁澶ф晳鍛戒紭鍔挎诞鐜扳€?/strong>鈥嬶細

  1. 鍐呭瓨鍗犵敤鍑忓皯70%锛堝璞″垱寤哄紑閿€娑堝け锛?/li>
  2. 浠g爜閲忕爫鍗婏紙鍐嶄篃涓嶇敤鍐欎竴鍫唃etInstance()锛?/li>
  3. 閬垮厤绾跨▼瀹夊叏闂锛堟棤鐘舵€佹柟娉曞ぉ鐒跺畨鍏級

浣嗗埆鎬ョ潃鍏ㄧ洏static锛佸幓骞存垜鍋氭敮浠樼郴缁熸椂锛屾妸璁㈠崟鐢熸垚鏂规硶鏀规垚闈欐€佺殑锛岀粨鏋滃苟鍙戦噺涓婃潵鐩存帴鏁版嵁閿欎贡鈥斺€斺€?strong>鈥嬪叡浜彉閲忊€?/strong>鈥嬭繖涓潙鎽斿緱鎴戦蓟闈掕劯鑲裤€?/p>


鍦烘櫙浜岋細閰嶇疆鏂囦欢琚玭ew浜嗗崄鍏亶锛焥tatic鏁欎綘鍋氫汉

鍜变滑缁勯偅涓厤缃腑蹇冿紝鍘熷厛鍐欏緱閭e彨涓€涓钁╋細

java澶嶅埗
// 姣忎釜妯″潡閮借繖涔堝啓
Config config = new Config();
String domain = config.getDomain();

缁撴灉姣忔鍚姩閮借璇诲崄鍑犳閰嶇疆鏂囦欢锛孖O鎿嶄綔鎱㈠緱鍍忚湕鐗涖€傜敤闈欐€佸彉閲忔敼閫犲悗锛?/p>

java澶嶅埗
public class GlobalConfig {
    private static final String DOMAIN = loadFromFile();
    
    public static String getDomain() {
        return DOMAIN;
    }
}

鈥?strong>鈥嬫晥鏋滅珛绔胯褰扁€?/strong>鈥嬶細

  • 鍚姩鏃堕棿缂╃煭40%
  • 閰嶇疆淇敼瀹炴椂鐢熸晥锛堥厤鍚堢儹鍔犺浇锛?/li>
  • 鍏ㄧ郴缁熼厤缃粺涓€鍑哄彛

浣嗚娉ㄦ剰锛佹湁娆℃垜鎶婃暟鎹簱瀵嗙爜鏀惧湪闈欐€佸彉閲忛噷锛岀粨鏋滆鍐呭瓨鎵弿宸ュ叿鎶撳寘锛屽樊鐐归吙鎴愬畨鍏ㄤ簨鏁呪€斺€斺€?strong>鈥嬫晱鎰熶俊鎭€?/strong>鈥嬪崈涓囧埆杩欎箞鐜╋紒


鍦烘櫙涓夛細Utils绫诲啓鎴愬洓涓嶅儚锛焥tatic鐨勬纭墦寮€濮垮娍

甯﹁繃鐨勫簲灞婄敓鍗佷釜鏈変節涓細鐘繖涓敊锛氬湪宸ュ叿绫婚噷娣锋潅闈欐€佸拰闈為潤鎬佹柟娉曘€傚氨鍍忔妸鍘ㄦ埧鍒€鍏峰拰椋熸潗涔卞爢锛岀湅鐫€灏辩碂蹇冿紒鏉ョ湅姝g‘绀鸿寖锛?/p>

java澶嶅埗
// 姝g‘濮垮娍锛氬伐鍏风被鏍囬厤涓変欢濂?/span>
public final class StringUtils {
    // 1.绉佹湁鏋勯€犲櫒闃瞡ew
    private StringUtils() {}
    
    // 2.绾潤鎬佹柟娉?/span>
    public static boolean isBlank(String str) {
        return str == null || str.trim().isEmpty();
    }
    
    // 3.閰嶅悎闈欐€佸鍏ユ洿棣?/span>
    public static String toCamelCase(String str) {
        // 杞崲閫昏緫...
    }
}

鈥?strong>鈥嬩笁澶ц璁¢搧寰嬧€?/strong>鈥嬶細

  1. 鐢╢inal閿佹缁ф壙锛堥槻姝㈣鐜╁潖锛?/li>
  2. 绉佹湁鏋勯€犲櫒璁惧崱锛堣皝鏁ew灏辨姤閿欙級
  3. 鏂规硶100%绾潤鎬侊紙淇濇寔宸ュ叿绫荤函娲佹€э級

浣嗗幓骞存垜瑙佽繃鏇寸粷鐨勶細鏈変汉缁欏伐鍏风被鍔犲疄渚嬬紦瀛橈紝缁撴灉瀵艰嚧姘镐箙浠e唴瀛樻孩鍑衡€斺€斺€?strong>鈥嬮潤鎬佹柟娉曚笉鏄瀮鍦惧満鈥?/strong>鈥嬶紝鍒暐閮藉線閲屽锛?/p>


瀹炴垬锛氫粠绉掓潃绯荤粺宕╂簝鐪媠tatic鐨凙B闈?/h3>

涓婁釜鏈堟湅鍙嬪叕鍙哥殑618澶т績锛屾湁涓鏉€鎺ュ彛鐢ㄩ潤鎬佹柟娉曞鐞嗗簱瀛橈紝缁撴灉3000骞跺彂鐩存帴鍑荤┛鏁版嵁搴撱€傛垜浠繛澶滄敼鎴愯繖鏍风殑缁撴瀯锛?/p>

java澶嶅埗
public class InventoryService {
    // 闈欐€佸彉閲忓瓨鍌ㄥ簱瀛?/span>
    private static AtomicInteger stock = new AtomicInteger(1000);
    
    // 闈欐€佹柟娉曟帶鍒舵墸闄?/span>
    public static boolean reduceStock() {
        return stock.decrementAndGet() >= 0;
    }
}

浣犱互涓鸿繖灏辩ǔ浜嗭紵閿欙紒褰撻泦缇ら儴缃叉椂锛屾瘡涓妭鐐圭殑stock鍚勮嚜涓烘垬锛屽簱瀛樼洿鎺ヨ秴鍗?鍊嶏紒鏈€鍚庢崲鎴怰edis鍒嗗竷寮忛攣鎵嶆悶瀹氥€傝繖涓渚嬪憡璇夋垜浠細

  • 鉁?閫傚悎锛氬崟鏈鸿交閲忕骇骞跺彂鎺у埗
  • 鉂?绂佸繉锛氬垎甯冨紡鐜涓嬬殑鐘舵€佺鐞?/li>
  • 馃挕 缁忛獙锛氶潤鎬佸彉閲忚閰嶅悎volatile鎴栧師瀛愮被

銆愬叓骞磋€侀笩鐨勭鎴垮缓璁€?/h3>

杩欎簺骞存垜鐢╯tatic韪╄繃鐨勫潙锛屾瘮鏂版墜鏉戝皬鎬兘澶氾紒鎬荤粨涓夋潯淇濆懡娉曞垯锛?/p>

  1. 鈥?strong>鈥嬪伐鍏风被瑁呬慨娉曞垯鈥?/strong>鈥嬶細鍍忓竷缃櫤鑳藉灞呴偅鏍疯璁″伐鍏风被锛屾墍鏈夊姛鑳藉嵆鎻掑嵆鐢紝缁濅笉鎷栨偿甯︽按
  2. 鈥?strong>鈥嬪唴瀛樻晱鎰熸搷浣滀笁涓嶅師鍒欌€?/strong>鈥嬶細澶ф枃浠跺鐞嗕笉static銆佹祦鎿嶄綔涓峴tatic銆佺紦瀛樼鐞嗕笉static
  3. 鈥?strong>鈥嬪苟鍙戝満鏅敓瀛樻寚鍗椻€?/strong>鈥嬶細鑳界敤灞€閮ㄥ彉閲忓氨鍒敤闈欐€佸彉閲忥紝蹇呴』鐢ㄦ椂璇烽殢韬惡甯ynchronized鎶よ韩绗?/li>

涓嬫鐪嬭鍚屼簨鍙堝湪鑳′贡new瀵硅薄锛岀洿鎺ユ妸杩欑瘒鏂囩珷鐢╀粬鑴镐笂锛佽浣忥紝static鐢ㄥ緱濂芥槸浠g爜缇庡甯堬紝鐢ㄤ笉濂藉氨鏄」鐩帢澧撲汉銆傜幇鍦ㄥ氨鍘绘鏌ヤ綘浠殑宸ュ叿绫伙紝淇濅笉榻愯兘鍙戠幇鏂板ぇ闄嗗憿锛?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载