这几天都在外面跑,没时间上机调代码,晚上回来趁这机会研究下,结果如下:
1bobguo@bobguo-PC:~/source/eetest$ java -version && javac hash.java && cat hash.java && time java -Xms2G -verbose:gc hash && time java -verbose:gc hash 2Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp 3java version "1.8.0_131" 4Java(TM) SE Runtime Environment (build 1.8.0_131-b11) 5Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode) 6Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp 7import java.util.HashMap; 8import java.util.Map; 9 10public class hash { 11 12 public static void main(String[] args) { 13 long start = System.currentTimeMillis(); 14 String time; 15 Map<String, String> map = new HashMap<>(); 16 for (int i = 0; i < 1000000; i++) { 17 time = String.valueOf(System.currentTimeMillis()); 18 map.put(i + "_" + time, time); 19 } 20 System.out.println(System.currentTimeMillis() - start); 21 } 22 23} 24Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp 25690 26 27real 0m0.806s 28user 0m0.964s 29sys 0m0.104s 30Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp 31[GC (Allocation Failure) 31744K->16720K(121856K), 0.0235111 secs] 32[GC (Allocation Failure) 48464K->35592K(153600K), 0.0363266 secs] 33[GC (Allocation Failure) 99080K->96188K(160256K), 0.0982848 secs] 34[Full GC (Ergonomics) 96188K->95872K(278528K), 1.0974248 secs] 35[GC (Allocation Failure) 159091K->145848K(295424K), 0.1148326 secs] 36[Full GC (Ergonomics) 145848K->145669K(398336K), 0.9425082 secs] 372901 38 39real 0m3.010s 40user 0m9.548s 41sys 0m0.200s 42
这个场景特殊在哪里呢?特殊在java擅长长期运行,所以针对这种从0开始剧烈使用内存,然后直接结束的的场景,默认参数并没有很好的优化导致的。