JDK13的新特性:AppCDS详解
AppCDS的全称是Application Class-Data Sharing。主要是用来在不同的JVM中共享Class-Data信息,从而提升应用程序的启动速度。 通常来说,如果要执行class字节码,JVM需要执行下面的一些步骤:给定一个类的名字,JVM需要从磁盘上面找到这个文件,加载,并验证字节码,最后将它加载进来。
JDK 14的新特性:JFR,JMC和JFR事件流
Java Flight Recorder(JFR)是JVM的诊断和性能分析工具。它可以收集有关JVM以及在其上运行的Java应用程序的数据。JFR是集成到JVM中的,所以JFR对JVM的性能影响非常小,我们可以放心的使用它。
jcmd:JDK14中的调试神器
jcmd是JDK自带的调试工具,具有非常强大的功能。jcmd是JDK7中正式引入的,有了jcmd,完全可以替换很多常用的其他工具,比如jstak和jmap。 jcmd可以将具体的诊断命令发送给JVM。为了安全起见,使用jcmd的用户必须跟运行的java程序具有同样的用户和用户组。 jcmd的调试命令有很多种,每一种调试命令又有自己的参数。
JDK14中的java tools简介
在还没有IDE的时代,高手们还是通过记事本来编程。那时候能够写程序的都是牛人。能把程序写得好的更是牛人中的牛人。 秃头大叔的程序员形象就是在那个时候建立起来的。 还记得十几年前的那一个春天,微风不动,太阳都羞红了脸。因为那时候的我还在一个javac,一个java的编译,运行着java程序。 虽然效率低下,但是看着我跑起来的一个又一个hello world,心里充满了欢喜。
JDK 14的新特性:switch表达式
switch的新特性可是源远流长,早在JDK 12就以预览功能被引入了,最终在JDK 14成为了正式版本的功能:JEP 361: Switch Expressions (Standard)。 其实Switch新增的功能有两个,一个就是可以连写case,一个就是switch可以带返回值了。
JDK 14的新特性:文本块Text Blocks
说起来,Text Blocks是在JDK13中以第一次预览版本引入的。现在在JDK14中是第二次预览版本 JEP 368: Text Blocks。 在我们日常的工作中,有时候需要用到一大段的字符串,这些字符串需要换行,需要排版,需要转义。在一个文本编辑器中,这当然是非常容易的事情。但是在java代码中,就是一个噩梦了。
JDK 14的新特性:Lombok的终结者record
自从面向对象产生之后,程序界就开始了新的变化,先是C发展到了C++,后面java横空出世,大有一统江湖的趋势。 面向对象凭借其结构化的特点和在大型项目中的优势,一路蓬勃发展到今。面向对象不是不好,但是太繁琐。
JDK 14的新特性:更加好用的NullPointerExceptions
让99%的java程序员都头痛的异常就是NullPointerExceptions了。NullPointerExceptions简称NPE,它是运行时异常的一种,也是java程序中最最容易出现的异常。
JDK 14的新特性:instanceof模式匹配
JDK14在2020年的3月正式发布了。可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks仍然是预览特性。 本文要讲的就是JDK14的一个预览特性instanceof的pattern matching。 也就是说在instanceof中可以使用模式匹配了。
JDK 15 JAVA 15的新特性展望
伴随着2020的寒冬和新冠病毒的肆虐,JAVA迎来了久未已久的JAVA 14。自从2017年JAVA 9发布之后,JAVA的发布版本跟上了敏捷开发的步伐,小步快跑,Java平台发布节奏已从每3年以上的主要版本转变为每6个月发布一次功能。现在,每年的3月和9月都会发布新的版本功能。
自定义parallelStream的thread pool
之前我们讲到parallelStream的底层使用到了ForkJoinPool来提交任务的,默认情况下ForkJoinPool为每一个处理器创建一个线程,parallelStream如果没有特别指明的情况下,都会使用这个共享线程池来提交任务。
java 8中构建无限的stream
在java中,我们可以将特定的集合转换成为stream,那么在有些情况下,比如测试环境中,我们需要构造一定数量元素的stream,需要怎么处理呢? 这里我们可以构建一个无限的stream,然后调用limit方法来限定返回的数目。
java 8中 predicate chain的使用
Predicate是一个FunctionalInterface,代表的方法需要输入一个参数,返回boolean类型。通常用在stream的filter中,表示是否满足过滤条件。
怎么break java8 stream的foreach
我们通常需要在java stream中遍历处理里面的数据,其中foreach是最最常用的方法。 但是有时候我们并不想处理完所有的数据,或者有时候Stream可能非常的长,或者根本就是无限的。 一种方法是先filter出我们需要处理的数据,然后再foreach遍历。 那么我们如何直接break这个stream呢?今天本文重点讲解一下这个问题。
java 8 stream中的Spliterator简介
Spliterator是在java 8引入的一个接口,它通常和stream一起使用,用来遍历和分割序列。 只要用到stream的地方都需要Spliterator,比如List,Collection,IO channel等等。
怎么在java中创建一个自定义的collector
在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类。 今天我们介绍一下怎么自定义一个Collector。
java 8 stream reduce详解和误区
Stream API提供了一些预定义的reduce操作,比如count(), max(), min(), sum()等。如果我们需要自己写reduce的逻辑,则可以使用reduce方法。 本文将会详细分析一下reduce方法的使用,并给出具体的例子。
java stream中Collectors的用法
在java stream中,我们通常需要将处理后的stream转换成集合类,这个时候就需要用到stream.collect方法。collect方法需要传入一个Collector类型,要实现Collector还是很麻烦的,需要实现好几个接口。 于是java提供了更简单的Collectors工具类来方便我们构建Collector。 下面我们将会具体讲解Collectors的用法。
java关于throw Exception的一个小秘密
之前的文章我们讲到,在stream中处理异常,需要将checked exception转换为unchecked exception来处理。
java 8 lambda表达式中的异常处理
java 8中引入了lambda表达式,lambda表达式可以让我们的代码更加简介,业务逻辑更加清晰,但是在lambda表达式中使用的Functional Interface并没有很好的处理异常,因为JDK提供的这些Functional Interface通常都是没有抛出异常的,这意味着需要我们自己手动来处理异常。