展望未来,JDK 12的新特性

JDK12以前的写法:

int numLetters;
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
numLetters = 6;
break;
case TUESDAY:
numLetters = 7;
break;
case THURSDAY:
case SATURDAY:
numLetters = 8;
break;
case WEDNESDAY:
numLetters = 9;
break;
default:
throw new IllegalStateException("Huh? " + day);
}

JDK12中的写法:

int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TU
ESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> throw new IllegalStateException("Huh? " + day);
};

JDK12中极大的简化了switch的写法。同时使用Lambda表达式运算符->来简化我们的处理。

类库

流处理

Streams中的API有一个新的收集器,由Collectors类提供。 可以使用teeing()方法获得新的收集器。 teeing()方法有三个参数:两个Collectors 和一个BiFunction。如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入流中的所有值都将传递到每个Collectors 中。 每个Collectors 的结果作为参数传递给BiFunction并生成最终结果。

示例就是计算平均值的例子

/* Assume Collectors is statically imported */
double average = Stream.of(1, 4, 2, 7, 4, 6, 5)
.collect(teeing(
summingDouble(i -> i),
counting(),
(sum, n) -> sum / n));

第一个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的用户也享受到了改进带来的好处,我建议大家可以持续关注我,如果一旦有了新的功能发布,我定会快速跟进更新。

现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕!我这边专门针对Android开发工程师整理了一套【Android进阶学习视频】、【全套Android面试秘籍】、【Android知识点PDF】。如有需要获取资料文档的朋友,可以点击我的GitHub免费获取!

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果你需要这些资料, ⬅ 专栏获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果你需要这些资料, ⬅ 专栏获取

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值