你变任你变,我用 Java 8
多年来,'你变任你变,我用 Java 8' 这句口号在业界广为流传。在我工作的这些年里,Java 8 仿佛已经成为一个不可或缺的终极版本。最近,我们公司新项目的架构设计都一致选择了 Java 8,这让我不禁好奇,为什么这么多企业都如此坚定地选择使用 Java 8 呢?
我自己一点浅薄的见解:
- Lambda 表达式和函数式编程:Java 8引入了Lambda表达式和函数式接口,使得编写函数式风格的代码变得更加简洁和易读。这为并发编程和事件驱动程序设计提供了更好的支持。
- Stream API:引入了Stream API,可以更容易地进行集合操作和数据处理,从而提高代码的简洁性和可读性。Stream API还提供了并行处理的能力,可以更高效地利用多核处理器,处理集合数据简直太香了。
- 新的日期和时间 API:Java 8提供了全新的日期和时间API(java.time包),解决了旧的Date和Calendar类存在的问题,使得日期和时间的处理更加简单和安全。
- 默认方法:在接口中引入了默认方法,使得接口的演进变得更加灵活,并且可以向现有的接口添加新的方法,而不会破坏现有的实现类。
- 并行数组操作:Java 8提供了新的并行数组操作,使得在多核处理器上进行数组操作更加高效。
- 更好的性能和安全性: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?
所以我们来看看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(); } }
特性优点
- 简化并发编程:开发人员可以编写类似于传统阻塞式 IO 的代码,而不需要使用回调或者异步编程模型。
- 减少线程开销:Fibers 是轻量级的用户级线程,可以在一个线程中并发执行,减少了线程创建和切换的开销。
- 提高性能和可伸缩性:通过减少线程开销和简化并发编程,可以提高应用程序的性能和可伸缩性。
二 .项目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(); // 调用本地方法 } }
特性优点
- 更简单的集成本地代码:Java 17 的改进使得与本地代码的集成更加简单,不再需要繁琐的手动内存管理和类型转换,减少了与本地代码交互时的复杂性。
- 提高灵活性:通过改进的 JNI 特性,Java 可以更灵活地与其他语言交互,包括 C、C++ 等本地代码,从而拓宽了 Java 应用程序的应用范围。
- 提高性能:改进后的 JNI 特性可以提高 Java 与本地代码交互的性能,减少了一些开销,使得 Java 应用程序能够更高效地调用本地代码,从而提升整体性能。
- 降低开发成本:通过简化与本地代码的集成,开发人员可以更快速地实现 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类。
特性优点
- 类型安全:通过密封接口和允许的类列表,可以在编译时就限制了可以实现该接口的类的范围,提高了类型安全性。
- 易于扩展:密封接口可以在后续添加新的实现类,只需在 permits 子句中添加新的类名即可,而不需要修改原有代码。
- 易于维护:由于密封接口明确规定了允许实现的类列表,因此在维护代码时可以更容易地理解和管理类的关系。
- 更好的可读性和可维护性:通过 permits 关键字可以清晰地看出哪些类是允许实现该接口的,提高了代码的可读性和可维护性。
- 代码更加规范化:使用密封接口和允许类可以使代码更加规范化,有效地组织类的层次结构,提高了代码的结构化程度。
五 .垃圾回收器的改进
在垃圾回收器的改进方面,Java 17引入了新的垃圾回收器ZGC(Z Garbage Collector),可以提高大内存堆的性能和吞吐量。
快速使用
shell
复制代码
java -XX:+UseZGC MyApp
UseZGC
表示启用Z Garbage Collector(ZGC)垃圾收集器。
ZGC是JDK 11中引入的一种低延迟、高吞吐量的垃圾收集器,适用于大内存和低延迟要求的场景。
Java17总结
总之 Java 17
- 增强的性能:对垃圾收集器、JIT 编译器和其他方面的性能进行了优化。
- 增强的安全性:改进的加密支持和安全算法。
- 增强的语言特性:新的语法、API 和工具。
- 增强的工具链:新的工具和改进。
我自己的看法。
- 代码的优化说实话我觉得完全没必要搞得这么花里胡哨,对于程序员来说,多写两行代码,少些两行代码不重要,代码重要的是思想。
- 安全性和稳定性,这我还没经过大型项目和时间的推敲,不好做出评价。
- 性能,网上说性能提升了,那就是提升了吧。
- 多了解新的东西。在里边寻找思想上的提升。
总结
一定要多思考,如果人永远待在舒适圈的话,人永远不会成长。共勉
觉得作者写的不错的,值得你们借鉴的话,就请点一个免费的赞吧!这个对我来说真的很重要。૮(˶ᵔ ᵕ ᵔ˶)ა