首页 > 其他分享 >JDK10优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析

JDK10优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析

时间:2023-09-25 17:05:58浏览次数:53  
标签:10 JDK 哪些 特性 线程 垃圾 回收 public


一、前言

上一期讲了JDK9的一些新特性,需要回顾的朋友们可以看下这篇文章《JDK9优化了哪些功能以及新增了哪些特性功能》

这一期讲一讲JDK10的一些新功能

二、新增特性

以下是JDK 10的一些新增或变化的特性:

1. 局部变量类型推断(Local Variable Type Inference):

引入了var关键字,允许在局部变量的声明中进行类型推断,从而使代码更简洁。例如:

var number = 10; // 推断number为int类型
var message = "Hello"; // 推断message为String类型

下面是一个示例代码,演示了如何使用JDK 10的局部变量类型推断特性:

import java.util.List;

public class Main {
    public static void main(String[] args) {
        var numbers = List.of(1, 2, 3, 4, 5); // 推断numbers为List<Integer>类型
        for (var number : numbers) { // 推断number为Integer类型
            System.out.println(number);
        }
    }
}

使用var关键字声明了一个名为numbers的List类型的变量。在for-each循环中,使用var关键字声明了一个名为number的Integer类型的变量,并依次打印了列表中的每个数字。

2. 应用程序数据共享(Application Class-Data Sharing):

引入了类数据共享(CDS)的动态归档,可以将类元数据和类的静态字段存储在文件中以实现类加载器的共享,从而加快应用程序的启动时间。

3. 线程本地握手机制(Thread-Local Handshakes):

引入了线程本地握手机制,可以在运行时启用或禁用线程之间的握手,以改善某些特定情况下的性能。

4. 基于时间的版本控制(Time-Based Release Versioning):

JDK 10开始采用基于时间的版本控制,每半年发布一个主要版本。这样可以更好地预测和计划JDK的发布。

5. 并行全垃圾回收(Parallel Full GC):

引入了并行全垃圾回收器,提供在全垃圾回收期间并行处理所有CPU核心的能力,从而提高垃圾回收性能。

6. 基于容器的JVM统计信息(Container-aware JVM Statistics):

JDK 10可以自动识别和获取运行在容器中的JVM的统计信息,包括CPU使用率、内存使用情况等,从而更好地适应容器环境。

7. 线程局部握手机制(Thread-Local Handshakes):

引入了线程局部握手机制,允许线程在执行代码块时主动触发握手,从而实现更细粒度的线程同步。

8. 改进的垃圾回收器接口(Improved Garbage Collector Interface):

JDK 10改进了垃圾回收器接口,提供更好的扩展性和灵活性,使开发人员能够更方便地实现自己的垃圾回收器。

以下是一个示例代码,演示了JDK 10的线程局部握手机制特性:

public class Main {
    public static void main(String[] args) {
        var thread = new Thread(() -> {
            System.out.println("Thread started");
            Thread.onSpinWait(); // 触发握手
            System.out.println("Thread resumed");
        });
        thread.start();
    }
}

我们创建了一个新线程,并在其中使用Thread.onSpinWait()方法触发了握手。这将导致线程暂停执行,直到其他线程也触发了握手,然后再继续执行。这种机制可以用于实现线程之间更细粒度的同步和协作。

9. 并行共享类数据(Parallel Shared Class Data):

JDK 10中引入了并行共享类数据的能力,使得多个线程可以同时访问共享的类数据,从而提高并发性能。

以下是一个示例代码,演示了JDK 10的并行共享类数据特性:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        numbers.parallelStream().forEach(System.out::println);
    }
}

在上述代码中,使用parallelStream()方法将列表的遍历操作并行化,以提高处理速度。多个线程可以同时访问共享的列表数据,将元素并行打印到控制台上。

10. 改进的垃圾回收器(Improved Garbage Collectors):

JDK 10改进了G1垃圾回收器和CMS垃圾回收器,提供更好的性能和可靠性。

11. 改进的JVM工具接口(Improved JVM Tools Interface):

JDK 10改进了JVM工具接口,提供更多的功能和选项,使开发人员能够更好地监控和调试Java应用程序。

12. 约束合适的方法(Consolidate the JDK Forest into a Single Repository):

JDK 10合并了JDK源代码库,将之前分散在各个不同存储库中的代码合并到一个单一的存储库中,从而提高开发效率和协作能力。

13. 改进的本地变量类型推断(Improved Local Variable Type Inference):

JDK 10对局部变量类型推断进行了改进,允许在lambda表达式的参数上使用var关键字。这样可以使代码更加简洁和易读。

以下是一个示例代码,演示了JDK 10的改进的本地变量类型推断特性:

import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Consumer<String> printLength = (var str) -> {
            System.out.println("Length: " + str.length());
        };

        printLength.accept("Hello");
    }
}

在上述代码中,我们使用var关键字在lambda表达式的参数上进行类型推断,而不是显示地指定参数类型。这样可以使代码更加简洁,同时保持可读性。

14. 改进的垃圾回收器接口(Improved Garbage Collector Interface):

JDK 10改进了垃圾回收器接口,提供了更多的控制和管理垃圾回收器的选项。开发人员可以更精细地调整垃圾回收器的行为,以满足具体的应用需求。

15. 应用类数据共享(AppCDS)的动态归档(Dynamic Class-Data Sharing):

JDK 10引入了动态归档的功能,允许将类元数据和类的静态字段存储在文件中,并在应用程序启动时进行共享。这可以加快应用程序的启动时间和内存占用。

16. 预测性垃圾回收(Predictive JIT):

JDK 10引入了预测性垃圾回收的功能,通过在编译时进行预测,对可能在未来产生垃圾的对象进行优化,从而降低垃圾回收的成本。

以下是一个示例代码,演示了JDK 10的改进的垃圾回收器接口特性:

import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<GarbageCollectorMXBean> collectors = ManagementFactory.getGarbageCollectorMXBeans();
        for (GarbageCollectorMXBean collector : collectors) {
            String name = collector.getName();
            String type = collector.getMemoryPoolNames()[0];
            System.out.println("Name: " + name + ", Type: " + type);
        }
    }
}

我们使用GarbageCollectorMXBean接口获取当前JVM的垃圾回收器信息,并打印出每个垃圾回收器的名称和类型。这样可以帮助开发人员更好地了解垃圾回收器的配置和行为。

17. 可嵌套的访问控制(Nest-Based Access Control):

JDK 10引入了可嵌套的访问控制机制,允许内部类和私有成员访问外部类的私有成员。这样可以简化代码并提高封装性。

以下是一个示例代码,演示了JDK 10的可嵌套的访问控制特性:

public class Outer {
    private static String message = "Hello";

    public static void main(String[] args) {
        Inner inner = new Outer().new Inner();
        inner.printMessage();
    }

    private class Inner {
        private void printMessage() {
            System.out.println(message); // 内部类可以访问外部类的私有成员
        }
    }
}

在上述代码中,内部类Inner可以访问外部类Outer的私有成员message。这样可以在内部类中直接访问外部类的私有成员,而无需通过公共方法进行间接访问。

18. Unicode 10支持(Unicode 10 Support):

JDK 10支持Unicode 10标准,包括新增的字符、标点符号和符号。

19. 标准化的HTTP客户端(Standardized HTTP Client):

JDK 10引入了一个标准化的HTTP客户端API,可以更方便地进行HTTP通信,支持HTTP/1.1和HTTP/2协议。

20. 改进的Java容器(Improved Java Containers):

JDK 10对Java容器进行了优化和改进,提供更好的性能和可扩展性。

以上只是JDK 10的一些特性和变化,还有其他一些功能和改进,例如容器优化、JVM启动速度的改进等。这些变化都旨在提高Java的性能和开发体验。


标签:10,JDK,哪些,特性,线程,垃圾,回收,public
From: https://blog.51cto.com/u_15430531/7597258

相关文章

  • JDK9优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析
    一、前言我们现在大部分公司都在使用jdk8,jdk8的功能主要是增加了lambda流式处理,还有优化了线程安全的时间LocalDate,这里我就先不赘述了,那jdk9相对jdk8优化了哪些功能,以及新增了哪些特性功能呢,下面一一给大家讲述一下二、新增特性以下是一些主要的变化和新增特性:1.模块化系统(Jig......
  • 高压放大器在互感器中的应用有哪些
    高压放大器是一种常用的电子元件,广泛应用于各种领域。在互感器中,高压放大器可以起到信号放大的作用,提高信号的强度和稳定性。下面西安安泰将详细介绍高压放大器在互感器中的应用。一、互感器是什么互感器是一种电气元件,主要用于测量和变换高电压和高电流信号。它通过在......
  • 企业sdwan组网要求:企业使用SD-WAN组网时有哪些要求?
    在当今信息时代,企业对于网络的稳定性和高效性要求越来越高。SD-WAN(软件定义广域网)作为一种新兴的网络技术,为企业提供了更加灵活、可靠和安全的广域网解决方案。在组建企业SD-WAN网络时,有一些关键要求需要考虑。高可用性:企业SD-WAN网络需要保证高可用性,确保业务的持续性和可靠性。......
  • Java SE 21 新增特性
    JavaSE21新增特性作者:Grey原文地址:博客园:JavaSE21新增特性CSDN:JavaSE21新增特性源码源仓库:Github:java_new_features镜像仓库:GitCode:java_new_featuresRecordPatterns该功能首次在JavaSE19中预览,在JavaSE20中发布第二次预览版,在此版本中成为永久性功......
  • 第三方测评机构做软件测试的对企业有哪些收益?专业第三方测评机构收费?
    ​ 权威第三方软件测试报告第三方测评机构做软件测试的对企业有很多收益。主要有以下几点:节约人力成本:对于很多软件企业而言,由于软件的开发上线需要聘请专业的软件测试人员,但是一旦项目不饱和或者结束,这样会提高人力成本。选择第三方软件测评机构进行软件测评的话,就能完美......
  • 浅谈PCBA加工中的阻焊设计的意义有哪些
    相信从事PCBA加工行业的同事都知道PCB的阻焊设计,阻焊层在控制PCBA焊接工艺的好坏中扮演着重要的角色,合理的阻焊设计时是保证PCBA焊接的主要因素之一,在设计PCB时应尽量减小焊盘特征周围的空隙及空气间隙,不适当的PCB阻焊设计会导致PCBA加工缺陷。下面就有贴片加工厂_安徽英特丽小编为......
  • python面向对象的三大特性:封装性、继承性、多态性
    python面向对象的三大特性:封装性、继承性、多态性一、python中的封装在python代码中,封装具有两层含义:①在把现实世界中的实体中的属性和方法写到类的里面的操作即为封装。classPerson(object):#封装属性#封装方法②封装可以为属性和方法添加私有权限(属性和方......
  • PostgreSQL教程:事务的ACID特性及基本使用
    什么是ACID?在日常操作中,对于一组相关操作,通常要求要么都成功,要么都失败。在关系型数据库中,称这一组操作为事务。为了保证整体事务的安全性,有ACID这一说:原子性A:事务是一个最小的执行单位,一次事务中的操作要么都成功,要么都失败。一致性C:在事务完成时,所有数据必须保持在一致的状态。(事......
  • MySQL 的 blob 类型有哪些?
    MySQL中有两种主要的BLOB类型,用于存储二进制数据:TINYBLOB:TINYBLOB类型可以存储最多255字节的二进制数据。BLOB:BLOB类型可以存储最多65,535字节的二进制数据。此外,MySQL还有两种变体的BLOB类型,它们用于存储更大的二进制数据:MEDIUMBLOB:MEDIUMBLOB类型可以存储最多16,77......
  • Java 21 正式发布!新特性专栏继续更起来了~
    就在昨天晚间,Oracle公司宣布Java21正式发布。该版本是继JDK17之后最新的长期支持版本(LTS),将获得至少8年的支持!Java21号称具有数千项性能、稳定性和安全性改进。新的JDK21包括对15项改进的抢先体验,这些增强功能是在OracleCloudWorld2023会议上宣布的,包括支持虚拟线程以......