Java 8、Java 11、Java 17 和 Java 21全面比较

【Java11下载、安装、部署指南】 【Java11下载、安装、部署到线上指南】 阅读详情
AI摘要

本文探讨了Java 8、11、17和21这几个LTS版本的差异。介绍了Java发布周期,各版本主要特性、性能改进、新语言特性、工具和API增强、弃用和删除功能等内容,还提及迁移注意事项,最后给出各版本适用建议,助开发者选合适版本。

Java 不断发展,每个新版本都会带来增强功能、弃用功能和新功能。在本文中,我们将探讨Java 8、Java 11、Java 17和最新的Java 21之间的差异。了解这些差异可以帮助开发人员和组织决定哪个版本最适合他们的项目。

1. Java 发布周期概述

从 Java 9 开始,Oracle 引入了新的六个月发布周期。这意味着每年发布两次新的 Java 版本。但是,长期支持 (LTS)版本(例如 Java 8、11、17 以及现在的 21)每隔几年发布一次,并且支持时间更长。

2. Java 各版本的主要特性

Java 8(LTS)

Java 8于2014 年 3 月发布,由于其稳定性和较长的支持周期,仍然是 Java 使用最广泛的版本之一。主要功能包括:

  • Lambda 表达式:通过允许将方法视为一等公民,实现了函数式编程。
  • Streams API:提供一种处理对象集合的强大方法。
  • 默认方法:允许接口具有方法实现,提高向后兼容性。
  • 可选类:减少空检查并有助于防止NullPointerException

Java 11(LTS)

Java 11 于2018 年 9 月发布,是 Java 8 之后的第一个 LTS,标志着现代 Java 的开始。主要功能包括:

  • Lambda 参数的局部变量语法:var在 lambda 表达式中使用。
  • HTTP 客户端(标准):新HttpClientAPI 取代HttpURLConnection,支持 HTTP/2 和 WebSockets。
  • 基于嵌套的访问控制:改进嵌套类的封装。
  • Pack200 的弃用:各种库已被弃用和删除,以鼓励现代化。

Java 17(LTS)

Java 17 于2021 年 9 月发布,是 Java 11 之后最受欢迎的 LTS 迁移选择。主要功能包括:

  • 密封类:允许开发人员定义受限的类层次结构。
  • 模式匹配instanceof:简化类型检查。
  • 记录:为不可变数据类引入紧凑语法。
  • 默认强封装:进一步改进 Java 9 中引入的模块系统执行。
  • 外部功能和内存 API(孵化器):促进更好的本机互操作。

Java 21(LTS)

Java 21于2023 年 9 月发布,带来了重要的新功能和改进:

  • Switch 的模式匹配:添加更具表现力且更安全的开关。
  • 记录模式:启用记录解构的模式匹配。
  • 虚拟线程(Project Loom):轻量级线程,简化编写高吞吐量、可扩展的应用程序。
  • 范围值:Project Loom 中的一项增强功能,支持在线程中灵活传递状态。
  • 结构化并发(孵化器):为生命周期与父任务绑定的并发任务提供模型。
  • 外部函数和内存 API(最终版):用于与本机代码有效互操作的最终 API。

3. 性能改进

Java 11 及更高版本引入了显着的性能改进,特别是在垃圾收集、启动时间和内存使用方面。

  • Java 8:默认使用并行 GC。
  • Java 11:引入Z 垃圾收集器(ZGC)和G1GC作为低延迟应用程序的默认 GC。
  • Java 17:G1GC 和 ZGC 进一步优化。
  • Java 21:包括虚拟线程的增强功能和改进的垃圾收集算法。

4. 新的语言特性

语言功能改进的快速比较:

5. 工具和 API 增强

  • Java 8:引入了一些最广泛采用的功能,如 Lambda 和 Stream API。
  • Java 11:引入了新的HttpClient和删除的工具等改进javaws。
  • Java 17:增强了 RandomGenerator、Stream 和 Optional 等 API。密封类和记录类型成为永久的。
  • Java 21:包括最终确定的外部函数和内存 API以及用于结构化并发的新 API。

6. 弃用和删除的功能

Java 的每个新版本都会弃用旧功能并删除不受支持的 API:

  • Java 11:删除了类似的弃用模块java.xml.ws和类似的工具javaws。
  • Java 17:弃用了安全管理器,并最终删除了 Nashorn JavaScript 引擎等旧 API。
  • Java 21:继续这一趋势,进一步弃用过时的功能,提高语言的整体性能和安全性。 

7. 迁移注意事项

从 Java 8 或 11 迁移到 Java 17 或 21 等较新版本在性能和功能集方面具有显着优势,但它也带来挑战:

  • 依赖兼容性:某些库或框架可能尚与较新的 Java 版本不兼容。
  • 较新的 API:采用新的 API(如 HTTP 客户端或记录类型)可能需要更改代码。
  • 垃圾收集和性能调整:新版本带来了优化的 GC,但可能需要根据应用程序需求进行调整。

8. 结论

  • Java 8:仍然被广泛使用但缺乏现代功能。
  • Java 11:一个稳定的 LTS 版本,提供现代功能,同时仍然与旧系统兼容。
  • Java 17:由于其现代功能和长期支持的平衡,最受推荐的 LTS 版本。
  • Java 21 :最新的 LTS 版本,带来了虚拟线程和结构化并发等尖端功能。

选择正确的 Java 版本取决于您的应用程序的特定需求,但转向最新的 LTS 版本(如 Java 17 或 21)将使您的应用程序面向未来并提供性能改进。

Java的三大版本,你有了解过吗? 阅读详情

相关推荐

Java 17 VS Java 8: 新旧对决,这些Java 17新特性你不容错过

Java是一门非常流行的编程语言,由于其跨平台性、可移植性以及强大的面向对象特性而备受青睐。Java最初由Sun Microsystems公司于1995年推出,随着时间的推移,Java发展迅速,版本不断更新。本篇博客将重点介绍Java 17与Java 8的对比,以及Java 17的新特性。

陈书予 2万+

官网下载JAVA的JDK11版本(下载、安装、配置环境变量)--2024最新

前言: jdk长期支持的版本有8、11和17,如果是64位操作系统可以下载11版本,在我的个人主页收藏里面有下载安装包 ​1.先去浏览器搜索:甲骨文官网或者复制网址进去 2.选择Products 14.下面系统变量--新建----输入对应的值--然后点击确定 (1)变量名输入JAVA_HOME (2)变量值输入jdk的安装位置,要选择到有版本的这个目录(快捷方式可以点击浏览目录里面去 二、安装jdk11步骤 三、配置jdk11环境变量 四、测试jdk11是否配置成功 详细讲解了官网下载JDK的步骤

快乐学习 12万+

Java 8(JDK 1.8)升级更新至 Java 11(JDK 11)/ Java 17(JDK 17)LTS

一、JDK的下载;二、JDK的安装;三、配置环境变量;四、(附)ADB环境变量配置。

beita08的博客 5万+

【Java】Java 11 新特性概览

Java 11 于 2018 年 9 月 25 日正式发布,且为长期支持版本(Long-Term-Support - LTS)。下面为 Oracle Java SE 产品的一些关键产品日期示例(

迪曼奥特迦-博客 7352

从Java8到Java21各版本新特性详解

上面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线,可以看出,JDK 17的支持时间最长,可以延续到2029年9月。考虑到技术更新的速度,这次免费商用8年的时间可谓是经过精心考虑,旨在让用户放心地升级到JDK 17(不过JDK 8的支持时间更长,可以延续到2030年12月)。从JDK诞生到现在,仅有几个版本得到了长期支持,主要包括JDK 7、JDK 8、JDK 11以及即将发布的JDK 17,它将是继Java 8之后最重要的LTS版本,是Java社区八年努力的成果。

小筱在线博客 3672

主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

技术分享 1724

Java JDK 的下载与安装(图文)

本篇文章以基于Windows 10 系统下载安装Oracle JDK 17 为例。其他版本下载安装步骤大致一致。

我是聂可的博客 9万+

(超详细)互补格雷码+相移码求解包裹相位(Python实现)

记录实现“互补格雷码+相移码”求解包裹相位的编码过程。也可以叫它“5+4”法,5代表五幅格雷码图像,4代表四步相移法的四张正弦条纹图。

暴雨梨花博客 3万+

Java 8、Java 11、Java 17和Java 21的比较

从Java 9开始,Oracle引入了新的六个月发布周期。这意味着每年会发布两个新的Java版本。然而,长期支持(LTS)版本——如Java 8、11、17和现在的21——每隔几年发布一次,并且支持时间更长。

qq_28791753的博客 2940

GNSS差分码偏差(DCB)从原理到实战:如何避免数据处理中的常见错误

本文深入解析GNSS差分码偏差(DCB)的原理及其对高精度定位的关键影响。针对数据处理中因忽略DCB校正导致的常见错误,如单系统PPP高程偏差、多系统融合精度下降及电离层研究失真等,提供了实战解决方案与主流DCB产品获取、集成方法,帮助用户有效规避陷阱,提升数据处理精度。

k5l6m的博客 224

LoRaWAN协议-物理层(PHY)详解

目录 1 前言 2 物理层包格式 2.1 LoRa调制 2.2 FSK调制 2.3 LR-FHSS 3 Uplink 4 Downlink 1 前言 如图所示,LoRaWAN是一种开放式网络协议,可提供由LoRa联盟标准化和维护的安全双向通信,移动性和本地化服务。该协议做为MAC层,属于数据链路层。其物理层(PHY)实现与其他设备的通信,目前物理层支持LoRa,FSK,LR-FHSS调制。 下图的PHY只标准了LoRa调制,是因为LoRaWAN实际应用中基...

只想.静静的博客 8773

Java 8、Java 11、Java 17 和 Java 21的全面比较

选择正确的 Java 版本取决于您的应用程序的特定需求,但转向最新的 LTS 版本(如 Java 17 或 21)将使您的应用程序面向未来并提供性能改进。发布,由于其稳定性和较长的支持周期,仍然是 Java 使用最广泛的版本之一。发布,是 Java 8 之后的第一个 LTS,标志着现代 Java 的开始。:继续这一趋势,进一步弃用过时的功能,提高语言的整体性能和安全性。:一个稳定的 LTS 版本,提供现代功能,同时仍然与旧系统兼容。:由于其现代功能和长期支持的平衡,最受推荐的 LTS 版本。

田字格 2057

WinForm实战:如何用C#和PdfiumViewer打造一个功能齐全的PDF阅读器(含源码)

本文详细介绍了如何使用C#和PdfiumViewer库从零开始构建一个功能齐全的WinForm PDF阅读器。内容涵盖项目环境搭建、核心组件解析、基于命令模式的工具栏与UI架构设计,并深入讲解了智能缩放、页面导航、打印功能等核心交互的实现,以及内存管理和性能优化等高级话题,为开发者提供了一套完整的实战解决方案。

docker8compose的博客 503

深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

Java 的版本从 JDK 8 到 JDK 21,不仅仅是语法糖的增加或标准库的扩展,它反映了 Java 社区对性能提升、并发处理以及开发者体验的深刻理解。每个版本都有其显著的特性,从 JDK 8 的 Lambda 表达式和 Stream API,到 JDK 21 的虚拟线程和模式匹配,Java 正在变得更现代、更高效,开发者也能通过这些新特性写出更加简洁、优雅的代码。

龚小帅的博客 1万+

PPT| 公司网络安全意识培训 P73

近年来,随着互联网的不断发展,网络安全问题也日益凸显,各种网络安全事件层出不穷,对个人和企业的信息安全带来了巨大的威胁。针对这一现状,国家加强了对信息安全的保护,相继颁布了多项法律法规,其中最重要的就是网络安全法。本文将从网络安全法和其他相关法律入手,对信息安全的保护措施进行深入分析。 本人在四大咨询机构从事咨询工作多年,二十年一线数字化规划咨询经验,提供制造业数智化转型规划服务,顶层规划/企业架构/数据治理/数据安全解决方案资料干货. 该PPT共73页,原文获取及来源公众号:【智能制造数字化咨询】

waldensss的博客 1422

ArcGIS与地理加权回归GWR【一】

因此,在实际问题研究中我们经常发现回归参数在不同地理位置上往往表现为不同,也就是说回归参数随地理位置变化,这时如果仍然采用全局空间回归模型(全局假设β是不会变得),得到的回归参数估计将是回归参数在整个研究区域内的平均值,如上所说某一个因素在ABC等不同的地理位置对房价的影响是不同的,假如采用全局空间回归模型,便忽略了数据的空间位置属性,只反映平均意义下因变量与自变量的相关关系,而不能有效反映回归关系的空间非平稳性的特征。当自变量为1个时,是一元线性回归,自变量为2个及以上时,称为多元线性回归。

JData_Engineer的博客 1374

多个 JDK 版本(Java 8、Java 17、Java 21)下载和切换

多个 JDK 版本(Java 8、Java 17、Java 21)下载、配置环境变量、切换版本、测试、在 IDEA 中切换 JDK

taiyang3285的博客 8万+

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

王老师青少年编程 3396

Java 8 & 11 & 17 & 21

当某个行为或操作独立于具体对象时,可以考虑使用函数。函数可以独立存在,不依赖于特定的对象实例。函数可以作为参数传递给其他函数,可以作为返回值返回,可以用于函数式编程等场景。)是指属于某个类或对象的行为或操作,它是面向对象编程的基本组成部分。方法通常用于描述对象的行为,可以访问对象的属性并对其进行操作。当需要描述某个对象的行为或操作时,通常应该使用方法。)是独立于对象的,可以独立存在的一段代码,它接受输入参数并返回一个值。方法可以被继承,可以被重写,可以实现接口,从而实现多态。中,函数通常指的是静态方法(

保持初心 保持好奇 936

智能手环嵌入式系统:STM32+ESP8266多传感器健康监护设计

可穿戴健康监测设备是物联网与边缘计算融合的典型应用,其核心在于多源生理信号采集、低功耗实时处理及安全云协同。基于光电容积脉搏波(PPG)的心率与血氧检测、NTC热敏电阻体温测量、加速度-角速度融合跌倒判据等技术,构成了老年健康监护的基础感知能力;而STM32主控与ESP8266协处理器分工架构,则实现了计算资源与通信负载的高效解耦。该方案依托FreeRTOS多任务调度、阿里云IoT物模型标准化交互及MQTT双向通信,兼顾实时性、可靠性和工程可维护性,广泛适用于居家养老、慢病管理与远程健康预警等场景。

weixin_33256096的博客 98

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JDK 8、JDK 11、JDK 17 和 JDK 21 的部分特性

JDK 8、JDK 11、JDK 17 和 JDK 21 的部分特性

优快云博客技术,java高级工程师,业务层架构师,高级管理认证,毕业设计可以联系我 1702

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

聊聊主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

清楚的看到Java社区的丰富以及Java语言的不断进步,与时俱进。但是呢,选择合适的 JDK 版本取决于项目的需求和应用场景.....

A-Itfuture的博客 6398

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JDK 8、JDK 11、JDK 17比较

新增 List.of() 、 Set.of() 、 Map.of() 创建不可变集合(如 List.of(1,2,3) ),比 Collections.unmodifiableList() 更简洁,且性能更好(底层为专用不可变实现)。新增 String.isBlank() (判断是否全为空白字符)、 strip() (移除首尾空白,支持 Unicode 空白)、 repeat(n) (重复字符串 n 次)等方法,比 trim() 更强大。

Jun_HNU的博客 2809

java8 java11 java17对比分析和选型

Java 8、Java 11和Java 17作为Java的三个重要版本,各自在功能、性能以及支持方面有着显著的区别。下面将从多个方面对这三个版本进行对比,并给出选型建议。

Licky13的博客 1950

深度了解 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

Java 的版本从 JDK 8 到 JDK 21,不仅仅是语法糖的增加或标准库的扩展,它反映了 Java 社区对性能提升、并发处理以及开发者体验的深刻理解。每个版本都有其显著的特性,从 JDK 8 的 Lambda 表达式和 Stream API,到 JDK 21 的虚拟线程和模式匹配,Java 正在变得更现代、更高效,开发者也能通过这些新特性写出更加简洁、优雅的代码。

s050106的博客 1253

JDK8、JDK11、JDK17和JDK21这几个版本更新的主要特性

引入了虚拟线程(Virtual Threads)的概念,这是一种轻量级的线程实现,能够显著减少高并发应用程序的编写、维护和观察的工作量。支持动态类文件常量,可以在不加载类的情况下,将常量加入到已有的类定义中,提供了更灵活的运行时操作。在内存管理和垃圾收集方面进行了优化,提供了更高效的序列集合和分代ZGC,提升了应用程序的性能。表达式的功能,新增了类型模式匹配和守卫模式,使得Switch语句的使用更加灵活和强大。提供了一套声明式处理数据的方式,使得对集合和数组的操作更加直观和高效。

m0_63564767的博客 3064
上一篇: Java 面试问题:Java 8 功能相关问题
下一篇: 如何在 Spring Boot 中使用Records和 MapStruct 创建 DTO
小蜗牛慢慢爬行
博客等级 码龄11年 340粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值