1.Stream
1) Stream的使用
1) 問題01: 爲什麼 list的 stream()方法返回的不是 Stream對象,而是 ReferencePipeline對象 答: Stream是一個接口 Interface, ReferencePipeline是 Stream的實現 參見文章 https://www.cnblogs.com/1626ace/p/13193369.html
==01 擴展:
List<Integer> list = Arrays.asList(3, 2, 3, 2, 5);
// 轉成list
List<Integer> squareList = list.stream().distinct().map(i -> i*i).collect(Collectors.toList());
// 轉成map
List<Integer> squareMap = list.stream().distinct().collect(Collectors.toMap(i -> i, i-> i * i));
02
stream api 的 flatMap方法接受一個lambda表達式函數, 函數的返回值必須也是一個stream類型,flatMap方法最終會把所有返回的stream合併,map方法做不到這一點,如果用map去實現,會變成這樣一個東西
參考: https://zhuanlan.zhihu.com/p/103686124
System.out.println(inverse(4.0).flatMap(OptionalTest::squareRoot));
2.Idea使用
sout是 System.out.println();的快捷鍵
3.其他
1) Math.sqrt 求平方根
4. JVM調優案例 04
不恰當的數據結構導致內存佔用過大
問題
一後臺的RPC服務器每10分鐘出現100ms的停頓
原因
內存中超過100萬個 HashMap<Long, Long> Entity該結構存儲文件空間效率太低,有效率僅16%
解決
修改爲Long數組或List的結構,提升空間利用率避免每10分鐘的100萬個對象佔用的空間大
由Windows虛擬內存導致的長時間停頓
問題
一個帶有心跳檢測功能的GUI桌面程序,心跳檢測偶有1分鐘都沒有響應的情況
原因
真正執行GC的時間不長,但是從準備開始收集到真正的GC的時間長,因GUI最小化時內存自動交換到了硬盤的頁面文件中,恢復文件導致的停頓
解決
加參數 -Dsum.awt.keepWorkingSetOnMinimize.=true 使最小化時立即響應