【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 list = Arrays.asList(3, 2, 3, 2, 5);

// 转成list

List squareList = list.stream().distinct().map(i -> i*i).collect(Collectors.toList());

// 转成map


List 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 Entity该结构存储文件空间效率太低,有效率仅16%

        解决

            修改为Long数组或List的结构,提升空间利用率避免每10分钟的100万个对象占用的空间大


    由Windows虚拟内存导致的长时间停顿

        问题

            一个带有心跳检测功能的GUI桌面程序,心跳检测偶有1分钟都没有响应的情况

        原因

            真正执行GC的时间不长,但是从准备开始收集到真正的GC的时间长,因GUI最小化时内存自动交换到了硬盘的页面文件中,恢复文件导致的停顿

        解决        

            加参数 -Dsum.awt.keepWorkingSetOnMinimize.=true 使最小化时立即响应

你可能感兴趣的:(【028】2020.11.28 周六 日常Java集锦)