jdk8带来了哪些新特性


jdk8距离发布已经有些时间了,集团内部也在大力推广,恰值新项目也选用了jdk8做开发,查阅下资料做个小结。
较之与前几个版本,jdk8最大的改变莫过于引入了lambda表达式以及stream机制。
新特性如下:
1. 语言层面
1)lambda表达式与函数接口
lambda表达式(闭包)允许将一个函数当作方法的数据(传递函数)或者说把代码当作数据。代码更加简洁紧凑。 详细示例后文描述。
函数接口:为兼容现有功能,使其可转换为lambda表达式,提出函数接口概念。函数接口只有一个抽象方法的接口(可以有多个默认方法或者静态方法),可转换为lambda表示式。通过注解@FunctionalInterface说明。
2)方法引用
他人的示例
第一种方法引用是构造方法引用,语法是:Class::new ,对于泛型来说语法是:Class ::new,请注意构造方法没有参数: 

final Car car = Car.create( Car::new );
final List< Car > cars = Arrays.asList( car );

第二种方法引用是静态方法引用,语法是:Class::static_method请注意这个静态方法只支持一个类型为Car的参数。

cars.forEach( Car::collide );

第三种方法引用是类实例的方法引用,语法是:Class::method请注意方法没有参数。

cars.forEach( Car::repair );

最后一种方法引用是引用特殊类的方法,语法是:instance::method,请注意只接受Car类型的一个参数。

final Car police = Car.create( Car::new );
cars.forEach( police::follow );

3)接口中支持默认方法与静态方法
默认方法不同于抽象方法,可保证原应用的兼用型(抽象方法必须后实现类去实现;默认方法实现类可以继承,也可以override)。关键字 default,static

public interface DefaultableFactory { 

static Defaultable create(Supplier<Defaultable> supplier) {
    return supplier.get();
}

default String defaultFunction() {
    return "it's defaultFunction";
}

void abstractFunction(); 
}

4)同一个声明处支持重复注解;注解支持类型更加广泛
5)方法参数反射
2. 集合库
1)引入stream机制以支持函数编程,允许集合对象中的大量操作,如串行或者并行的map-reduce转换 

roster
.stream()
.filter(
    p -> p.getGender() == Person.Sex.MALE
        && p.getAge() >= 18
        && p.getAge() <= 25)
.map(p -> p.getEmailAddress())
.forEach(email -> System.out.println(email));  

2)hashmap性能优化
3. 安全性
4. 工具
jdeps: 用于包或者类级别文件依赖关系分析
5. 时间与日期
新的java.time包包含了所有关于日期、时间、日期时间、时区、Instant(跟日期类似但精确到纳秒)、duration(持续时间)和时钟操作的类。
6. Nashorn Javascript 引擎
7. io,nio
8. 并发
1)java.util.concurrent.ConcurrentHashMap包使用stream机制以及lambda表达式支持聚合操作
2)新增java.util.concurrent.locks.StampedLock 做读写锁
9. hotSpot
移除永生代,使用metaspace
JVM参数 -XX:PermSize 和 –XX:MaxPermSize被XX:MetaSpaceSize 和 -XX:MaxMetaspaceSize代替 

其他特性及示例后续补上

### 回答1: JDK 17 中引入了以下新特性: 1. 模块系统:改进了 Java 应用程序的组织和部署方式。 2. 多版本兼容性(MVC):允许多个 Java 版本并存,以便在升级 JRE 时不会影响现有应用程序。 3. 已弃用的方法可以移动到不同的包中,而不会破坏现有应用程序。 4. 的字符串方法:为了改进字符串的性能,增了一些字符串方法。 5. 对于高精度数学的支持 6. 为了帮助应用程序更好地诊断,改进了性能数据采集和展示功能 7. 对 JFR 的改进 ( Java Flight Recorder ) 8. 对 ZGC 的改进(Z Garbage Collector) 9. 对 CDS 的改进 ( Class Data Sharing ) 10. 增加了关于线程和锁的类 这些特性都是对JDK 16和之前版本进行改进和加强,帮助开发人员更快、更安全地构建和部署应用程序。 ### 回答2: JDK 17(Java Development Kit 17)是Java的一个版本,其中有一些新特性。以下是其中一些重要的新特性: 1. 嵌套导入语句(Nested import statements):嵌套导入允许在单个导入语句中引入多个类或静态成员。这降低了编写和维护代码的复杂性。 2. 基于源代码的Java编译(Source-Based Java Compilation):JDK 17引入了的Java编译模式,它能够在不生成.class文件的情况下进行编译。这加快了代码的构建速度,并降低了构建过程的开销。 3. AppCDS的改进(Improved AppCDS):应用程序类数据共享(AppCDS)现在支持对持久性存储的序列化数据的压缩。这有助于减少Java堆占用的内存,并提高应用程序的性能。 4. 可垃圾回收的系统内存(Garbage Collector System Memory):JDK 17中引入了一个的标志,允许Java堆的一部分被垃圾回收器保留,不被操作系统回收。这有助于降低内存分配和回收的成本。 5. 线程本地握手(Thread-Local Handshakes):引入了一种的机制,使Java运行时能够在干预同步操作时与应用程序进行协商。这可以提高多线程应用程序的性能。 6. 基于JEP 356的垃圾回收器接口:JDK 17引入了与垃圾回收器相关的接口,以支持开发人员为Java虚拟机定义自己的垃圾回收器。 这些是JDK 17中的一些新特性,它们为Java开发人员提供了更多的功能和性能改进,同时也帮助开发人员更好地编写高效的应用程序。 ### 回答3: JDK 17是Java开发工具包(JDK)的一个版本,它引入了许多特性和改进。以下是一些JDK 17的新特性: 1. Sealed类型:引入了一个的关键字"sealed"来修饰类或接口,限制了允许继承或实现它们的类的范围。这样可以提供更好的封装和更严格的类使用控制。 2. 基于位的操作和无符号整数:JDK 17引入了的方法和类,支持基于位的操作和无符号整数计算。这使得对位级数据的操作更加方便和高效。 3. 嵌套的JVM元数据:JDK 17将JVM元数据存储的格式进行了优化,引入了更紧凑和高效的方式,减少了内存使用和运行时开销。 4. 预期的垃圾收集器接口:JDK 17引入了一个的接口,允许开发者定义自己的垃圾收集器并与JVM进行集成。这提供了更大的灵活性和定制化选项。 5. G1垃圾收集器控制:JDK 17提供了更多的控制选项来配置G1垃圾收集器,以优化性能和内存利用率。 6. 基于Root证书的标准PKI工具:JDK 17引入了基于Root证书的标准PKI(Public Key Infrastructure)工具,以加强Java应用程序的安全性和身份验证功能。 7. 统一的日志系统:JDK 17引入了一个统一的日志系统,它可以与不同的日志实现集成,并提供了更简洁和一致的API,使得日志记录和跟踪更加方便。 总之,JDK 17带来了许多特性和改进,包括Sealed类型、基于位的操作和无符号整数、嵌套的JVM元数据、预期的垃圾收集器接口、G1垃圾收集器控制、基于Root证书的标准PKI工具和统一的日志系统。这些新特性为开发者提供了更丰富的工具和选项,以加强Java应用程序的功能和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值