double average = Stream.of(1, 4, 2, 7, 4, 6, 5)
.collect(teeing(
summingDouble(i -> i),
counting(),
(sum, n) -> sum / n));
[/code]
第一个Collectors 计算输入流的总和,而第二个Collectors 计算元素的数量。 BiFunction将总和除以元素计数以评估平均值。
java.io
InputStream skipNBytes(long n)
以上代码会跳过输入流中n个字节的数据。 如果n<=0,则不跳过任何字节。
java.text中
有一个新类CompactNumberFormat
。 这是NumberFormat
的子类 以紧凑的形式格式化十进制数。
紧凑形式的一个例子是将1,000,000写为1M,因此代码中只需要2个而不是9个字符。
JVM
一个低暂停时间的垃圾收集器
新增了一个名为 Shenandoah 的 GC 算法,通过与正在运行的 Java 线程同时进行垃圾收集工作来减少 GC 暂停时间。
G1 垃圾收集器的改进(G1的暂停时间最大的值的控制目标)
G1将堆空间(年轻代和老年代)划分成区域。 这样的做法是老年代可以在一次GC中不需要进行垃圾收集。 当G1需要收集时,它会选择它确定需要收集的区域。 这称为collection set (集合集) 。 在JDK 12之前,一旦在collection set (集合集)上开始工作,那么所有工作都必须完成,基本上是作为原子操作。 这样做的问题在于,有时候,由于应用程序使用堆空间的方式发生了变化,收集collection set (集合集)的垃圾最终会变得太大而且收集时间太长而导致暂停时间目标无法满足。
在JDK 12中,如果G1识别出这种情况,它将在collection set (集合集)开始工作中途中止收集,这样就不会影响应用程序继续为新对象分配空间。这样的话G1将更好地实现暂停时间的目标。
G1 垃圾收集器的增强
在 JVM中,堆一般会占据很大的内存,当它启动时,它将从底层操作系统虚拟内存分配器请求内存。 在应用程序运行时,GC会进行如下检查,发现堆所需的内存量并不多,这样的情况就可以把部分已经分配的内存返回给操作系统以供其他应用程序使用。
在JDK 12中,G1将在应用程序不活跃的期间定期尝试继续或触发并发周期以确定整体Java堆使用情况。未使用的内存可以更及时和可预测的方式返回到操作系统。
新的命令行标志-XX:G1PeriodicGCInterval
可用于设置检查之间的毫秒数。
对于长时间处于空闲状态的应用程序,该功能将使JVM的内存利用率更加充分。
总结
JDK 12提供了不少的新功能和API,switch表达式对开发人员来说是最实用,同时使用 G1的用户也享受到了改进带来的好处,我建议大家可以持续关注我,如果一旦有了新的功能发布,我定会快速跟进更新。
资料分享
这是我从某优质机构弄来的一些资料,内容我认为确实称得上优质二字,如需领取,请点赞这篇文章,关注我然后点击这里即可免费领取
首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:
(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)

其次分享一些技术知识,以截图形式分享一部分:
Tomcat架构解析:

算法训练+高分宝典:

Spring Cloud+Docker微服务实战:

最后分享一波面试资料:
切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:

Java高级架构面试知识整理:

切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:
[外链图片转存中…(img-HQXzZ2pv-1623728384458)]
Java高级架构面试知识整理:
[外链图片转存中…(img-ZV0O3A0U-1623728384459)]
来源:https://blog.csdn.net/m0_57286472/article/details/117921419
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!