
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 使最小化时立即响应
网友评论