【028】2020.11.28 週六 日常Java集錦


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 使最小化時立即響應

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章