【Java学习之路】不讲武德的Spring < (-︿-)> 逼我掌握Java17 是吧 ?

你变任你变,我用 Java 8

多年来,'你变任你变,我用 Java 8' 这句口号在业界广为流传。在我工作的这些年里,Java 8 仿佛已经成为一个不可或缺的终极版本。最近,我们公司新项目的架构设计都一致选择了 Java 8,这让我不禁好奇,为什么这么多企业都如此坚定地选择使用 Java 8 呢?

我自己一点浅薄的见解:

  1. Lambda 表达式和函数式编程:Java 8引入了Lambda表达式和函数式接口,使得编写函数式风格的代码变得更加简洁和易读。这为并发编程和事件驱动程序设计提供了更好的支持。
  2. Stream API:引入了Stream API,可以更容易地进行集合操作和数据处理,从而提高代码的简洁性和可读性。Stream API还提供了并行处理的能力,可以更高效地利用多核处理器,处理集合数据简直太香了。
  3. 新的日期和时间 API:Java 8提供了全新的日期和时间API(java.time包),解决了旧的Date和Calendar类存在的问题,使得日期和时间的处理更加简单和安全。
  4. 默认方法:在接口中引入了默认方法,使得接口的演进变得更加灵活,并且可以向现有的接口添加新的方法,而不会破坏现有的实现类。
  5. 并行数组操作:Java 8提供了新的并行数组操作,使得在多核处理器上进行数组操作更加高效。
  6. 更好的性能和安全性:Java 8引入了许多新的优化和改进,提高了Java程序的性能和安全性,使其更适合于大规模企业级应用程序的开发和部署。

所以Java 8 一直是市场的主流。

好你个Spring , 不讲武德,不让我用 Java 8 是吧

所以啊,我也就不怎么关注 Oracle 公司的 java的版本更替,因为还是一句话 "你变任你变,我用 Java 8"。

众所周知,"Java是Java,Spring 是 Spring 是两门语言"。但是一些新的需求是我不得不用 SpringBoot 3.0 以上的版本的时候,这么一创建项目才知道,好家伙,你小子什么时候只支持 Java 17了,我靠,我不用Java 17你不让我用Spring是吧,好好好,那这就不得不了解一下Java 17了,是什么让 Spring 你如此迷恋Java 17?

image-20240109161246687.png

所以我们来看看Java17到底比Java8提升在哪里?

一. 项目Loom和Fibers

Java 17引入了项目Loom,旨在通过引入轻量级的Fibers(或称为纤程)和协作式线程调度器来改善并发编程。这就使得Java能够更高效地处理大量线程,从而提高了并发编程的效率。

快速使用

1、创建一个 Fiber:

 

java

复制代码

Thread fiber = Thread.startVirtualThread(() -> {    // 在这里放置需要执行的代码 });

2、在 Fiber 中执行需要并发执行的任务:

 

java

复制代码

fiber.execute(() -> {    // 在 Fiber 中执行的任务 });

3、等待 Fiber 完成:

 

java

复制代码

fiber.join();

4、一个完整例子

 

java

复制代码

import java.lang.Thread; ​ public class Main {    public static void main(String[] args) {        Thread fiber = Thread.startVirtualThread(() -> {            System.out.println("This is a lightweight fiber!");       });        fiber.join();   } }

特性优点

  1. 简化并发编程:开发人员可以编写类似于传统阻塞式 IO 的代码,而不需要使用回调或者异步编程模型。
  2. 减少线程开销:Fibers 是轻量级的用户级线程,可以在一个线程中并发执行,减少了线程创建和切换的开销。
  3. 提高性能和可伸缩性:通过减少线程开销和简化并发编程,可以提高应用程序的性能和可伸缩性。
二 .项目Panama

Java 17对Java本地接口(JNI)进行了改进,以更好地与本地代码交互。这些改进使得Java能够更轻松地集成本地代码,提高了Java在与其他语言交互方面的灵活性和性能。

Java 8 是如何调用C++ 的 可以参考我这篇文章。

【.NET C# 学习之路】JAVA 调用 C# 动态库 DLL 函数库 ~ - 掘金 (juejin.cn)

快速使用

1、创建本地方法接口(Native Method Interface):在 Java 类中声明需要调用的本地方法,使用 native 关键字标识这些方法为本地方法。例如:

 

java

复制代码

public class NativeIntegration {    public native void callNativeMethod(); }

2、使用 javac 编译 Java 类:使用 javac 编译器编译包含本地方法接口的 Java 类,生成对应的 .class 文件。

3、使用 javah 生成头文件:使用 javah 工具生成包含本地方法声明的头文件。在命令行中进入包含生成的 .class 文件的目录,然后执行以下命令:

 

java

复制代码

javah NativeIntegration

这将生成一个名为 NativeIntegration.h 的头文件,包含了本地方法的声明。

4、实现本地方法:在本地代码(例如 C 或 C++)中实现在头文件中声明的本地方法。例如,在 NativeIntegration.h 中声明的方法需要在本地代码中实现,例如:

 

c

复制代码

#include <jni.h> #include "NativeIntegration.h" ​ JNIEXPORT void JNICALL Java_NativeIntegration_callNativeMethod(JNIEnv *env, jobject obj) {    // 实现本地方法的具体逻辑 }

5、编译本地代码:使用对应的编译器(如gcc)编译本地代码,生成对应的动态链接库(.so 文件或 .dll 文件)。

6、在 Java 中加载本地库:在 Java 类中使用 System.loadLibrary() 方法加载编译好的本地库。例如:

 

java

复制代码

public class NativeIntegration {    static {        System.loadLibrary("NativeIntegration");   }    public native void callNativeMethod(); }

7、调用本地方法:在 Java 中调用本地方法。例如:

 

java

复制代码

public class Main {    public static void main(String[] args) {        NativeIntegration nativeIntegration = new NativeIntegration();        nativeIntegration.callNativeMethod(); // 调用本地方法   } }

特性优点

  1. 更简单的集成本地代码:Java 17 的改进使得与本地代码的集成更加简单,不再需要繁琐的手动内存管理和类型转换,减少了与本地代码交互时的复杂性。
  2. 提高灵活性:通过改进的 JNI 特性,Java 可以更灵活地与其他语言交互,包括 C、C++ 等本地代码,从而拓宽了 Java 应用程序的应用范围。
  3. 提高性能:改进后的 JNI 特性可以提高 Java 与本地代码交互的性能,减少了一些开销,使得 Java 应用程序能够更高效地调用本地代码,从而提升整体性能。
  4. 降低开发成本:通过简化与本地代码的集成,开发人员可以更快速地实现 Java 与本地代码的交互,减少了开发成本和时间。
三 .库的改进 Stream的新方法toList()

快速使用

 

java

复制代码

import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; ​ public class Main {    public static void main(String[] args) {        Stream<String> stream = Stream.of("Java", "is", "awesome");        List<String> list = stream.collect(Collectors.toList());        System.out.println(list); // 输出:[Java, is, awesome]   } }

四 .增强的安全性 密封类 和 允许类引入
 

java

复制代码

// 定义一个密封类 Shape public sealed class Shape {    // ... } ​ // 定义一个最终类 Circle,实现了 Shape 密封类 public final class Circle extends Shape {    // ... } ​ // 定义一个最终类 Rectangle,实现了 Shape 密封类 public final class Rectangle extends Shape {    // ... } ​ // 定义一个最终类 Triangle,实现了 Shape 密封类 public final class Triangle extends Shape {    // ... }

我们定义了一个密封类 Shape,然后实现了它的三个最终类:Circle、Rectangle 和 Triangle。通过sealed关键字,我们在Shape类中限定了允许的子类范围,这样就可以确保只有这三个类可以实现Shape类。

特性优点

  1. 类型安全:通过密封接口和允许的类列表,可以在编译时就限制了可以实现该接口的类的范围,提高了类型安全性。
  2. 易于扩展:密封接口可以在后续添加新的实现类,只需在 permits 子句中添加新的类名即可,而不需要修改原有代码。
  3. 易于维护:由于密封接口明确规定了允许实现的类列表,因此在维护代码时可以更容易地理解和管理类的关系。
  4. 更好的可读性和可维护性:通过 permits 关键字可以清晰地看出哪些类是允许实现该接口的,提高了代码的可读性和可维护性。
  5. 代码更加规范化:使用密封接口和允许类可以使代码更加规范化,有效地组织类的层次结构,提高了代码的结构化程度。
五 .垃圾回收器的改进

在垃圾回收器的改进方面,Java 17引入了新的垃圾回收器ZGC(Z Garbage Collector),可以提高大内存堆的性能和吞吐量。

快速使用

 

shell

复制代码

java -XX:+UseZGC MyApp

UseZGC表示启用Z Garbage Collector(ZGC)垃圾收集器。

ZGC是JDK 11中引入的一种低延迟、高吞吐量的垃圾收集器,适用于大内存和低延迟要求的场景。

Java17总结

总之 Java 17

  1. 增强的性能:对垃圾收集器、JIT 编译器和其他方面的性能进行了优化。
  2. 增强的安全性:改进的加密支持和安全算法。
  3. 增强的语言特性:新的语法、API 和工具。
  4. 增强的工具链:新的工具和改进。

我自己的看法。

  • 代码的优化说实话我觉得完全没必要搞得这么花里胡哨,对于程序员来说,多写两行代码,少些两行代码不重要,代码重要的是思想。
  • 安全性和稳定性,这我还没经过大型项目和时间的推敲,不好做出评价。
  • 性能,网上说性能提升了,那就是提升了吧。
  • 多了解新的东西。在里边寻找思想上的提升。

总结

一定要多思考,如果人永远待在舒适圈的话,人永远不会成长。共勉

觉得作者写的不错的,值得你们借鉴的话,就请点一个免费的赞吧!这个对我来说真的很重要。૮(˶ᵔ ᵕ ᵔ˶)ა

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值