作为一个非长期支持(LTS)版本,Java12于2019年3月发布。JEP189:Shenandoah垃圾收集器(预览特性)Shenandoah垃圾收集器,一个专门用来处理大堆(Heap)和低延迟垃圾收集器,目前是一个实验性质的垃圾收集器。对于需要处理大量数据的应用,如高吞吐和大内存的应用,传统垃圾收集器在回收内存时可能导致明显的停顿。为了解决这个问题,尤其是在大内存需求的应用场景中,引入Shenandoah垃圾收集器。Shenandoah使用了一种用于并发压缩堆时维护对象引用的技术(BrooksPointers:布鲁克斯指针)。这种技术允许收集器在压缩堆时并行地移动对象,而不必暂停应用线程,
Java12引入Collectors.teeing(),进一步增强了Java的流(Stream)处理能力。teeing()允许对同时对一个流进行两种不同的收集操作,并将这两种操作的结果合并成一个。方法定义如下:Collectors.teeing(Collector<?superT,A,R1>downstream1,Collector<?superT,A,R2>downstream2,BiFunction<?superR1,?superR2,R>merger)downstream1和downstream2:两个不同的Collector实例。merger:一个B
为了能够以更简洁的方式显示大数字,Java12引入紧凑数字格式化(CompactNumberFormatting),这是对NumberFormat的一个补充。紧凑数字格式化,可以将十进制、货币或百分比的长数字格式化为短格式,例如将1,000格式化为1K,1,000,000为1M等。这种表达的方式特别适合需要在有限空间内显示数字的场景,如图表、用户界面。使用NumberFormat类的getCompactNumberInstance()就可以实现:@TestpublicvoidNumberFormatTest()throwsIOException{NumberFormatcompactForma
为了提高了文件处理的便利性和效率,Java12新增方法Files.mismatch(Path,Path),该方法用于比较两个文件的内容,它返回两个文件内容第一次不匹配的位置索引。如果文件完全相同,则返回-1。我们新建两个文件,文件内容如下:file_01.txt内容:https://skjava.com,一个专注死磕Java一站式Java学习平台,站长是大明哥。file_02.txt内容:https://skjava.com,一个专注死磕Java一站式Java学习平台,站长是大明哥。示例:@TestpublicvoidmismatchTest()throwsIOException{Pathpa
为了进一步提高String的灵活度,使String的处理更加简单高效,Java12引入三个方法对StringAPI进一步增强。indent(intn)transform(Function<?superString,?extendsR>f)describeConstable()和resolveConstantDesc()indent(intn)该方法用于调整字符串的缩进。它根据指定的值增加或减少每行的空格数。如果n是正数,它会在每行前面添加相应数量的空格;如果n是负数,则减少缩进,直到某行的所有前导空格都被移除或达到指定的缩进级别。@TestpublicvoidindentTest
Switch语句,这是Java入门中控制流程的部分,它是除if语句外的另外一种条件判断,提供了比连续的if-else语句更加清晰和结构化的选择机制。大明哥相信学过Java的小伙伴没有不知道怎么使用它吧。从最初的Switch语句仅支持整型数据类型(如byte,short,char,和int),以及枚举类型(Java5引入)。到后面的Java7开始支持String类型,虽然Java7这一改进极大地增加了Switch语句的灵活性和实用性,但是Switch语句依然存在一些显著的缺陷:"Fall-through"行为:在没有显式break语句的情况下,Switch语句会从一个case