Java版本之前世今生(一)
文章目录
- Java版本之前世今生(一)
- **1. Oak 语言**
- **2. JDK Beta**
- **3. JDK 1.0**
- **4. JDK 1.1**
- **5.J2SE 1.2 Playground**
- **6. J2SE 1.3 Kestrel**
- **7.J2SE 1.4 Merlin**
- **8. J2SE 5 Tiger**
- **9.Java SE 6 Mustang**
- **10.Java SE 7 Dolphin**
- **11. Java SE 8 (LTS版本)**
- **12. Java SE 9**
- **13. Java SE 10**
- **14.Java SE 11 (LTS版本)**
- **15.Java SE 12**
- 17 JDK 17
- 总结
一直比较仰慕Java两位大师**(James Gosling 、Doug Lea)**,但是一直没有沉下心深入研究下Java,最近一段的时间请教很多架构师(阿里、腾讯)。
最好的东西其实就是最基础的东西,决定执笔写下一些东西,开启个人公众号第一篇技术篇幅(Java版本之前世今生),应该算比较全的Java文章。
用着蹩脚的英语细细品读英文文档,了解不为人知的Java知识。
1. Oak 语言
Oak 语言是James Gosling 博士在1991创建,最初是为Sun微系统公司的机顶盒项目创建的。
Java technology was created as a programming tool in a small, closed-door project
initiated by Patrick Naughton, Mike Sheridan, and James Gosling of Sun in 1991. But
creating a new language wasn't even the point of "the Green Project."
2. JDK Beta
1995年,Oak被命名为Java,因为它已经是Oak Technologies的商标了
第一个Beta版本是发布在1995.5.23 ,提出了Write Once,Run Anywhere愿景
第一个公开版本 8个包文件,212的类文件 。
3. JDK 1.0
版本发布时间:第一个版本发布在1996.1.23
第一稳定版本是JDK1.0.2,定义为Java1
JDK 1.0提供了一个纯解释执行的Java虚拟机(Sun Classic VM)。
代表技术:Java虚拟机 、Applet、AWT
4. JDK 1.1
版本发布时间:1997.02.19
核心包
package java.appletpackage java.awtpackage java.awt.datatransferpackage java.awt.eventpackage java.awt.imagepackage java.beanspackage java.iopackage java.langpackage java.lang.reflectpackage java.mathpackage java.netpackage java.rmipackage java.rmi.dgcpackage java.rmi.registrypackage java.rmi.serverpackage java.securitypackage java.security.aclpackage java.security.interfacespackage java.sqlpackage java.textpackage java.utilpackage java.util.zip
新特性:
-
Internationalization(国际化)
-
Security and Signed Applets(安全相关)
-
AWT Enhancements(AWT增强功能)
-
JavaBeans
-
JAR File Format(JAR文件)
-
Networking Enhancements(网络增强功能)
-
IO Enhancements(IO功能增强)
-
Math Package(Math函数包)
-
Remote Method Invocation(RMI远程调用)
-
Object Serialization(序列化)
-
Reflection(反射)
-
JDBC- Connecting Java and Databases(数据库驱动)
-
Inner Classes(内部类)
-
Java Native Interface(JNI扩展)
-
Performance Enhancements(性能优化)
-
Miscellaneous Features (其他特性)
-
Byte, Short and Void Classes (新增byte,short和void类)
-
Accessing Resource Files
-
The APPLET Tag (HTML)
代表技术:JAR文件格式、JNI、JDBC、JavaBeans、RMI、内部类、反射
5.J2SE 1.2 Playground
**版本发布时间:**1998.12.08
1998年从1.2开始以后的版本定义为Java2,直到J2SE 1.5版本,版本名称为J2SE(Java 2 Platform, Standard Edition)取代了JDK,用来区分企业平台J2EE (Java 2 Platform, Enterprise Edition) and J2ME (Java 2 Platform, Micro Edition),这是Java一个非常重要的版本 ,将Java扩展到59个包、1520个类。
新特性
Basic Features(基础特性)
-
strictfp keyword
新增strictfp 关键字修饰符,用于类、接口或方法
-
Sound
-
Package Version Identification
-
Collections framework(引入集合的特性)
Java Foundation Classes (Java基础类)
-
Abstract Window Toolkit (AWT)
-
第一代的JavaGUI组建
-
Swing Components
-
是AWT的非菜单用户界面控件的抽象基类
-
2D Graphics and Imaging
-
2D绘制组件
-
Input Method Framework
-
Accessibility docs
-
Drag-and-Drop data transfer
Enterprise Features(企业版本特性)
-
Interface Definition Language (IDL)
-
Java Database Connectivity (JDBCTM)
-
Enterprise JavaBean (EJB)
Tool Support(工具支持)
-
Java Virtual Machine Debugger Interface (JVMDI)
-
Java Virtual Machine Profiler Interface (JVMPI)
-
Sun’s JVM was equipped with a JIT compiler for the first time
第一次使用JIT编译器
-
Java plug-in
代表技术:EJB、Java Plug-in、Swing、JIT编译器、Collections集合
6. J2SE 1.3 Kestrel
**版本发布时间:**2000.05.08
新特性:
-
Java Naming and Directory Interface (JNDI) included in core libraries (previously available as an extension)
JNDI是 Java 命名与目录接口,JNDI 提供的间接寻址允许跨企业交付可伸缩的、功能强大且很灵活的应用程序
-
Remote Method Invocation (RMI)
Java远程方法调用,Java的RPC框架基本都是使用RMI
-
RMI/IIOP ,RMI was modified to support optional compatibility with CORBA(ORB)
IIOP 是 CORBA 的通信协议。它定义通过 CORBA 客户端与服务器之间的连线发送位的方式
-
Java IDL compiler, idlj
Java IDL 编译器,idlj
-
Input Method Framework
输入方法框架、输入法框架
-
Collections Framework Enhancements
-
Support for Motif 2.1
支持 Motif 2.1
-
Synthetic proxy classes
-
HotSpot JVM
1999 年 4 月首次发布 J2SE 1.2 JVM 的 HotSpot JVM
-
Java Platform Debugger Architecture (JPDA)
**代表技术:**HotSpot JVM、JPDA、JNDI、RMI远程方法调用、CORBA
7.J2SE 1.4 Merlin
**版本发布时间:**2004.02.06
新特性:
-
Regular expressions modeled after Perl regular expressions(正则表达式)
-
Exception chaining allows an exception to encapsulate original lower-level exception
-
Internet Protocol version 6 (IPv6) support IPv6协议的支持
-
Non-blocking I/O (Java) (named NIO) (specified in JSR 51)
NIO 同步非阻塞 -
Logging API (specified in JSR 47) 日志
-
New I/O APIs( buffer management, character-set support, regular-expression - - matching, file I/O, and scalable network I/O)
I/O增强功能: buffer ,正则表达式,文件I/O,网络I/O
-
Image I/O Framework 图片I/O
-
Integrated XML parser and XSLT processor (JAXP) (specified in JSR 5 and JSR 63)
XML解析的支持 -
Integrated security and cryptography extensions (JCE, JSSE, JAAS)
-
Java Web Start included (Java Web Start was first released in March 2001 for J2SE 1.3) (specified in JSR 56)
-
Preferences API (java.util.prefs)
-
Java 2DTM technology
-
Java Print Service
-
Long-term Persistence of JavaBeansTM Components
-
DBCTM 3.0 API
-
Assertion Facility,assert keyword (specified in JSR 41)
-
Endorsed Standards Override Mechanism
-
performance enhancements in many areas of the platform
-
Java Naming and Directory InterfaceTM (JNDI)
-
CORBA, Java IDL, and RMI-IIOP
-
JavaTM Platform Debugger Architecture
-
JavaTM Plug-in Product
-
Collections Framework (RandomAccess、 LinkedHashMap、IdentityHashMap)
集合新增:(RandomAccess、 LinkedHashMap、IdentityHashMap)
Tools
- The java application launcher supports command-line options for support of the new Assertions Facility.
- The javadoc tool
- The native2ascii tool
- The idlj tool
- The orbd tool
- The servertool(服务器工具)
- The rmic compiler (rmic 编译器)
- The graphical Policy Tool utility (图形工具)
**代表技术:**正则表达式、NIO、日志类、XML解析器
8. J2SE 5 Tiger
**发布版本时间:**2004.09.30
新特性
新的语言特性:
-
Generics: provides compile-time (static) type safety for collections and eliminates the need for most typecasts (type conversion) (specified by JSR 14)
泛型的添加
-
Metadata: also called annotations; allows language constructs such as classes and methods to be tagged with additional data, which can then be processed by metadata-aware utilities (specified by JSR 175)
元数据(注解),编程语言定义在class、method上,元数据能进行扫描
-
Autoboxing/unboxing: automatic conversions between primitive types (such as int) and primitive wrapper classes (such as Integer) (specified by JSR 201)
自动装箱与自动拆箱
-
the enum keyword creates a typesafe (specified by JSR 201)
enum类型添加有序的值列表,以前通过常亮或者构造器来实现
-
Varargs: the last parameter of a method can now be declared using a type name followed by three dots (e.g. void drawtext(String… lines));
可变参数的添加 (e.g. void drawtext(String… lines));
-
Enhanced for each loop: the for loop syntax is extended (specified by JSR 201)
遍历for循环,使用在数组,可迭代对象
-
Improved semantics of execution for multi-threaded Java programs;
改进了多线程Java程序的执行语义;
-
the new Java memory model addresses issues of complexity, effectiveness, and performance of previous specifications
新的Java内存模型解决了以前规范的复杂性、有效性和性能问题
-
Static imports
静态导入
标准库新增功能
-
Automatic stub generation for RMI objects
为RMI对象自动生成存根
-
Swing: New skinnable look and feel, called synth
-
The concurrency utilities in package java.util.concurrent
新增concurrent工具包
-
Scanner class for parsing data from various input streams and buffers
新增Scanner class,用于解析来自各种输入流和缓冲区的数据
代表技术:泛型、可变参数、元数据(注解)、自动装箱与自动拆箱、迭代
9.Java SE 6 Mustang
**发布版本时间:**2006.12.11
新特性
-
Support for older Win9x versions dropped; unofficially, Java 6 Update 7 was the last release of Java shown to work on these versions of Windows.
不再支持较老的Win9x版本;非正式地说,Java 6 Update 7是在这些Windows版本上运行的最后一个Java版本。
-
Scripting Language Support (JSR 223): Generic API for tight integration with scripting languages, and built-in MozillaJavaScript Rhino integration.
脚本语言支持(JSR 223):集成脚本语言通用的API,以及内置的Mozilla JavaScript Rhino集成。
-
Dramatic performance improvements for the core platform, and Swing.
核心平台和Swing的性能有了显著的改进。
-
Improved Web Service support through JAX-WS (JSR 224).
通过JAX-WS (JSR 224)改进了Web服务支持。
-
JDBC 4.0 support (JSR 221).
JDBC4.0支持
-
Java Compiler API (JSR 199): an API allowing a Java program to select and invoke a Java Compiler programmatically.
Java编译器API (JSR 199):允许Java程序以编程方式选择和调用Java编译器的API。
-
Upgrade of JAXB to version 2.0: Including integration of a StAX parser.
JAXB升级到2.0版:包括集成StAX解析器。
-
Support for pluggable annotations (JSR 269).
可插拔注解
-
Many GUI improvements, such as integration of SwingWorker in the API, table sorting and filtering, and true Swingdouble-buffering (eliminating the gray-area effect).
许多GUI改进,如在API中集成SwingWorker、表排序和过滤,以及真正的swingdouble缓冲(消除灰色区域效应)。
-
JVM improvements include: synchronization and compiler performance optimizations, new algorithms and upgrades to existing garbage collection algorithms, and application start-up performance.
JVM优化,同步和编译器性能优化、新算法和对现有垃圾收集算法的升级,以及应用程序启动性能。
**代表技术:**可插拔注解
10.Java SE 7 Dolphin
**发布版本时间:**2011.07.28
新特性:
-
JVM support for dynamic languages, with the new invokedynamic bytecode under JSR-292,following the prototyping work currently done on the Multi Language Virtual Machine
JVM支持动态语言,并在JSR-292下使用新的invokedynamic字节码,这是目前在多语言虚拟机上完成的原型工作的基础上实现的
-
Compressed 64-bit pointers (available in Java 6 with -XX:+UseCompressedOops)
压缩64位指针
-
These small language changes (grouped under a project named Coin):
这些小的语言变化(分组在一个名为Coin的项目下):
-
- Strings in switch(String 使用在swtich)
- Automatic resource management in try-statement动态资源管理使用在try-statement
- Improved type inference for generic instance creation, aka the diamond operator <> :添加diamond操作符<>
- Simplified varargs method declaration(简化的varargs方法声明)
- Binary integer literals(二进制整数文字)
- Allowing underscores in numeric literals(允许在数字文字下划线)
- Catching multiple exception types and rethrowing exceptions with improved type checking(捕获多个异常类型并使用改进的类型检查重新抛出异常)
-
Concurrency utilities under JSR 166
-
JSR 166下的并发实用程序
-
New file I/O library (defined by JSR 203) adding support for multiple file systems, file metadata and symbolic links. The new packages are java.nio.file, java.nio.file.attribute and java.nio.file.spi
新文件I/O库(由JSR 203定义),增加了对多个文件系统、文件元数据和符号链接的支持。新的包是java.nio。文件,java.nio.file。属性和java.nio.file.spi
-
Timsort is used to sort collections and arrays of objects instead of merge sort
TimSort是结合了合并排序(合并排序)和插入排序(插入排序)而得出的排序算法,使用在数组和集合里面
-
Library-level support for elliptic curve cryptography algorithms
Library-level 支持 椭圆曲线加密算法
-
An XRender pipeline for Java 2D, which improves handling of features specific to modern GPUs
一个用于Java 2D的XRender管道,它改进了对特定于现代GPUs的特性的处理
-
New platform APIs for the graphics features originally implemented in version 6u10 as unsupported APIs
最初在版本6u10中作为不受支持的api实现的图形特性的新平台api
-
Enhanced library-level support for new network protocols, including SCTP and Sockets Direct Protocol
增强了对新的网络协议的库级支持,包括SCTP和Socket协议
-
Upstream updates to XML and Unicode
Upstream 更新到XML and Unicode
-
Java deployment rule sets
Java部署规则集
**代表技术:**支持动态语言、SCTP和Socket协议、TimSort
11. Java SE 8 (LTS版本)
**发布版本时间:**2014.03.18
新特性
-
JSR 335, JEP 126: Supporting lambda expressions also enables functional-style operations on streams of elements, such as MapReduce-inspired transformations on collections.
支持lambda表达式,还支持对元素流的函数式操作,比如集合上MapReduce-inspired 的转换。默认方法允许API的作者在不破坏旧代码的情况下向接口添加新方法。
-
JSR 223, JEP 174: Project Nashorn, a JavaScript runtime which allows developers to embed JavaScript code within applications
一个JavaScript运行时,它允许开发人员在应用程序中嵌入JavaScript代码
-
JSR 308, JEP 104: Annotation on Java types
新增 Annotation 类型
-
Unsigned integer arithmetic
无符号整数算术
-
JSR 337, JEP 120: Repeating annotations
-
JSR 310, JEP 150: Date and time API
日期API
-
JEP 178: Statically-linked JNI libraries
静态链接的JNI库
-
JEP 153: Launch JavaFX applications (direct launching of JavaFX application JARs)
启动JavaFX应用程序(直接启动JavaFX应用程序jar)
-
JEP 122: Remove the permanent generation
JVM移除永久代,新增了元空间
**代表技术:**lambda 表达式、流操作
12. Java SE 9
**发布版本时间:**2017.09.22
新特性
-
JEP 193: Variable handles: define a standard means to invoke the equivalents of variousjava.util.concurrent.atomic and sun.misc.Unsafe operations
-
JEP 222: jshell: The Java Shell (a Java REPL)
-
REPL (JShell):交互式编程环境。
-
JEP 228: Add More Diagnostic Commands
添加Diagnostic指令
-
JEP 263: HiDPI graphics: automatic scaling and sizing
HiDPI 图形:自动缩放和调整大小
-
JEP 266: More concurrency updates. It includes a Java implementation of Reactive Streams,including a newFlow class that included the interfaces previously provided by Reactive Streams
响应式流(Reactive Streams)编程
-
JEP 268: XML catalogs
-
JEP 282: jlink(The Java Linker): create a tool that can assemble and optimize a set of modules and their dependencies into a custom run-time image. It effectively allows to produce a fully usable executable including the JVM to run it
-
JEP 295: Ahead-of-time compilation
提前编译
-
JSR 376: Modularization of the JDK under Project Jigsaw (Java Platform Module System)
-
JavaDB was removed from JDK
**代表技术:**响应式流(Reactive Streams)、提前编译
13. Java SE 10
**发布版本时间:**2018.03.21
新特性共有12个重要特性
- JEP 286: Local-variable type inference
var 局部变量类型推断。 - JEP 296: Consolidate the JDK forest into a single repository
将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程。 - JEP 304: Garbage-collector interface
统一的垃圾回收接口。 - JEP 307: Parallel full GC for G1
G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟。 - JEP 310: Application class-data sharing. This allows application classes to be placed in the shared archive to reduce startup and footprint for Java applications
应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。 - JEP 312: Thread-local handshakes
ThreadLocal 握手交互。在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。 - JEP 313: Remove the native-header generation tool – javah
移除 JDK 中附带的 javah 工具。可以使用 javac -h 代替。 - JEP 314: Additional Unicode language-tag extensions
使用附加的 Unicode 语言标记扩展。 - JEP 316: Heap allocation on alternative memory devices
能将堆内存占用分配给用户指定的备用内存设备。 - JEP 317: Experimental Java-based JIT compiler. This is the integration of the Graal dynamic compiler for the Linuxx64 platform
使用 Graal 基于 Java 的编译器,可以预先把 Java 代码编译成本地代码来提升效能。 - JEP 319: Root certificates
在 OpenJDK 中提供一组默认的根证书颁发机构证书。开源目前 Oracle 提供的的 Java SE 的根证书,这样 OpenJDK 对开发人员使用起来更方便。 - JEP 322: Time-based release versioning
基于时间定义的发布版本,即上述提到的发布周期。版本号分别是大版本,中间版本,升级包和补丁版本。
**代表技术:**G1垃圾回收
14.Java SE 11 (LTS版本)
**发布版本时间:**2018.09.25
新特性有:
-
JEP 181:Nest-Based访问控制
-
JEP 309: Dynamic class-file constants
动态类文件常量 -
JEP 315:改善Aarch64 intrinsic
-
JEP 318: Epsilon: a no-op garbage collector无操作垃圾收集器(Epsilon)
-
JEP 320:消除Java EE和CORBA模块
-
JEP 323: Local-variable syntax for parameters
局部变量的语法lambda参数 -
JEP 331: Low-overhead heap profiling
-
JEP 321: HTTP client (standard)
HTTP客户端(标准) -
JEP 324:Curve25519和Curve448关键协议
-
JEP 328: Flight recorder 飞行记录器
-
JEP 329:ChaCha20和Poly1305加密算法
-
JEP 330: Launch Single-File Source-Code Programs
发射一列纵队源代码程序
-
JEP 332: Transport Layer Security (TLS) 1.3
传输层安全性(Transport Layer Security,TLS)1.3 -
JEP 331: Low-Overhead Heap Profiling
低开销堆分析
-
JEP 333:ZGC:A Scalable Low-Latency Garbage Collector (Experimental)
ZGC:可扩展的低延迟垃圾回收器(实验)
-
JavaFX, Java EE and CORBA modules have been removed from JDK
-
JEP 335: Deprecated the Nashorn JavaScript engine
废弃Nashorn JavaScript引擎
-
JEP 336: Deprecate the Pack200 Tools and API
废弃 Pack200工具和API
-
Unicode 10.0.0 support (while current version is Unicode 11.0.0, it’s only in Java 12)
Unicode 10的支持,Java12 支持 Unicode 11.0.0
**代表技术:**Epsilon垃圾回收器、ZGC垃圾回收器
15.Java SE 12
**发布版本时间:**2019.03.19
作为“功能性版本”,JDK 12 总共包含 8 个新的 JEP :
- JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
新增Shenandoah 的垃圾回收器,减少停顿时间 - JEP 230: Microbenchmark Suite
新增一套微基准测试,使开发者能够基于现有的 Java Microbenchmark Harness(JMH)轻松测试 JDK 的性能,并创建新的基准测试。 - JEP 325: Switch Expressions (Preview)
对 switch 语句进行扩展 - JEP 334: JVM Constants API
引入一个 API 来对关键类文件 (key class-file) 和运行时工件的名义描述(nominal descriptions)进行建模,特别是那些可从常量池加载的常量。 - JEP 340: One AArch64 Port, Not Two
删除与 arm64 端口相关的所有源码,保留 32 位 ARM 移植和 64 位 aarch64 移植。 - EP 341: Default CDS Archives
默认生成类数据共享(CDS)存档。 - JEP 344: Abortable Mixed Collections for G1
当 G1 垃圾回收器的回收超过暂停目标,则能中止垃圾回收过程。 - JEP 346: Promptly Return Unused Committed Memory from G1改进 G1 垃圾回收器,以便在空闲时自动将 Java 堆内存返回给操作系统。
**代表技术:**Shenandoah垃圾回收器
16. JEP
Java的新特性,所有的JEP都会发布在openJdk上
17. JSR规范
JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。
- Real-time Specification forJava
- Boundary-ScanAPI
- JavaTMManagementExtensions(JMXTM)Specification
- ECperfBenchmarkSpecification
- XMLParsingSpecification
- UnifiedPrintingAPI(JavaPrintServiceAPI)
- IndustrialAutomationExtension
- OpenServicesGatewaySpecification
- FederatedManagementArchitectureSpecification
- PreferencesAPISpecification
- JAINTMTCAPSpecification
- JavaTMDataObjects(JDO)Specification
- DecimalArithmeticEnhancement
- AddGenericTypesToTheJavaTMProgrammingLanguage
- ImageI/OFrameworkSpecification
17 JDK 17
JDK 17 新特性说明
JEP 406:switch的模式匹配(预览)(JDK-8213076)
specification
通过switch表达式和语句的模式匹配,以及模式语言的扩展,增强Java编程语言。将模式匹配扩展到switch允许对表达式进行测试,每个模式都有特定的操作,以便可以简洁而安全地表达复杂的面向数据的查询。
有关更多详细信息,请参见JEP 406
JEP 409:密封类(JDK-8260514)
specification
密封类(Sealed Class)已添加到Java语言中。密封类和接口限制了哪些其他类或接口可以扩展或实现它们。
密封类由JEP 360并在JDK 15中作为预览功能交付。它们再次被提出,并进行了改进,由JEP 397并在JDK 16中作为预览功能提供。现在,在JDK 17中,密封类正在最终确定,与JDK 16没有任何更改。
有关更多详细信息,请参见JEP 409
JEP 382:新的macOS渲染管道(JDK-8238361)
client-libs/2d
Swing API用于渲染的Java 2D API现在可以使用新的Apple Metal加速渲染API 给macOS。
目前默认情况下,这是禁用的,因此渲染仍然使用OpenGL API,这些API被Apple弃用,但仍然可用和支持。
要启用金属,应用程序应通过设置系统属性指定其使用:
-Dsun.java2d.metal=true
Metal或OpenGL的使用对应用程序是透明的,因为这是内部实现的区别,对Java API没有影响。Metal管道需要macOS 10.14.x或更高版本。在早期版本上设置它的尝试将被忽略。
有关更多详细信息,请参见[JEP 382(https://openjdk.java.net/jeps/382)
大图标访问新API(JDK-8182043)
client-libs/javax.swing
JDK 17中提供了一个新的方法javax.swing.filechooser.FileSystemView.getSystemIcon(File, int, int),该方法允许在可能的情况下访问更高质量的图标。它已为Windows平台完全实施;但是,其他平台上的结果可能会有所不同,稍后将增强。例如,通过使用以下代码:
FileSystemView fsv = FileSystemView.getFileSystemView();
Icon icon = fsv.getSystemIcon(new File(“application.exe”), 64, 64);
JLabel label = new JLabel(icon);
用户可以为“application.exe”文件获得更高质量的图标。此图标适用于创建可以在HighDPI环境中更好地扩展的标签。
DatagramSocket可以直接加入多播组(JDK-8237352)
core-libs/java.net
java.net.DatagramSocket在此版本中已更新,以添加对加入多播组(multicast group)的支持。它现在定义了加入和离开多播组的加入组和离开组方法。java.net.DatagramSocket的类级API文档已更新,以解释如何配置普通DatagramSocket并用于加入和离开多播组。
此更改意味着DatagramSocket API可以用于组播应用程序,而无需使用旧的java.net.MulticastSocket API。MulticastSocket API的工作原理和以前一样,尽管它的大多数方法都被弃用了。
有关此变更理由的更多信息,请查看CSRJDK-8260667
JEP 356:增强型伪随机数生成器(JDK-8193209)
core-libs/java.util
为伪随机数生成器(PRNG)提供新的接口类型和实现,包括可跳转的PRNG和一类额外的可拆分PRNG算法(LXM)。
有关更多详细信息,请参见JEP 356
Ideal Graph Visualizer的现代化(JDK-8254145)
hotspot/compiler
Ideal Graph Visualizer(IGV)是一个可视化和交互式地探索HotSpot VM C2即时(JIT)编译器中使用的中间表示的工具,已经现代化。增强功能包括:
支持在最多JDK 15上运行IGV(IGV底层NetBeans平台支持的最新版本)
更快的、基于Maven的IGV构建系统
块形成、组删除和节点跟踪的稳定
默认过滤器中更直观的着色和节点分类
具有更自然默认行为的排名快速节点搜索
现代化的IGV部分兼容从早期JDK版本生成的图形。它支持基本功能,如图形加载和可视化,但辅助功能,如节点聚类和着色可能会受到影响。
有关构建和运行IGV的详细信息,请参见https://github.com/openjdk/jdk17/tree/master/src/utils/IdealGraphVisualizer。
“New API”的新页面和改进的“Deprecated”页(JDK-8263468)
tools/javadoc(tool)
JavaDoc现在可以生成一个页面,总结API中最近的更改。要包括的最近版本的列表是使用 --since命令行选项指定的。这些值用于查找具有匹配@since的声明,因为要包含在新页面上的标记。–since-label命令行选项提供了要在“New API”页面标题中使用的文本。
在总结已弃用项目的页面上,您可以查看按已弃用项目的版本分组的项目。
错误消息中的源详细信息(JDK-8267126)
tools/javadoc(tool)
当JavaDoc报告输入源文件中的问题时,它将以类似编译器(javac)诊断消息的方式显示问题的源行,以及包含指向该行位置的插入符号(^)的行。
此外,日志记录和其他“信息”消息现在写入标准错误流,留下标准输出流用于命令行选项特别请求的输出,如命令行帮助。
JEP 412:外部函数和内存API(孵化)(JDK-8265033)
core-libs
引入一个API,Java程序可以通过该API与Java运行时之外的代码和数据互操作。通过有效地调用外部函数(即JVM外部的代码),并通过安全地访问外部内存(即不由JVM管理的内存),该API使Java程序能够调用本机库并处理本机数据,而不会有JNI的脆弱性和危险。
有关更多详细信息,请参阅JEP 412
控制台字符集API(JDK-8264208)
core-libs
java.io.Console已更新,以定义一个新方法,该方法返回控制台的Charset。返回的Charset可能与Charset.defaultCharset()方法返回的Charset不同。例如,它返回IBM437,而Charset.defaultCharset()在Windows (en-US)上返回windows-1252。请参阅https://bugs.openjdk.java.net/browse/JDK-8264209了解更多详细信息。
用于反序列化的JDK Flight Recorder事件(JDK-8261160)
core-libs/java.io:serialization
现在可以使用JDK Flight Recorder (JFR)监控对象的反序列化。当启用JFR且JFR配置包括反序列化事件时,每当运行程序尝试反序列化对象时,JFR将发出事件。反序列化事件名为jfr.Derialization,默认情况下禁用。反序列化事件包含序列化筛选器机制使用的信息;请参阅对象输入筛选器规范。此外,如果启用了过滤器,JFR事件指示过滤器是接受还是拒绝对象的反序列化。有关如何使用JFR反序列化事件的更多信息,请参阅文章监控反序列化提高应用安全性。有关使用和配置JFR的参考信息,请参阅JFR运行时指南和JFR命令参考JDK任务控制文件的章节。
JEP 415:实现特定于上下文的反序列化过滤器(JDK-8264859)
core-libs/java.io:serialization
JEP 415:特定于上下文的反序列化过滤器允许应用程序通过JVM范围的过滤器工厂配置特定于上下文的和动态选择的反序列化过滤器,该工厂被调用以为每个单独的反序列化操作选择过滤器。
用于序列化过滤的Java核心库开发人员指南介绍了用例,并提供了示例。
本机字符编码名称的系统属性(JDK-8265989)
core-libs/java.lang
引入了一个新的系统属性本机.encode。此系统属性提供基础主机环境的字符编码名称。例如,它通常在Linux和macOS平台中具有UTF-8,在Windows (en-US)中具有Cp1252。请参阅https://bugs.openjdk.java.net/browse/JDK-8266075了解更多详细信息。
添加java.time.InstantSource (JDK-8266846)
core-libs/java.time
引入了一个新的接口java.time.InstantSource。此接口是java.time.Clock的抽象,只关注当前时刻,不引用时区。
十六进制格式和解析实用程序(JDK-8251989)
core-libs/java.util
java.util.HexFormat为基元类型和字节数组提供十六进制和十六进制之间的转换。分隔符、前缀、后缀和大写或小写的选项由返回HexFormat实例的工厂方法提供。
实验Compiler Blackholes支持(JDK-8259316)
hotspot/compiler
增加了对Compiler Blackholes的实验支持。这些对于低级基准测试非常有用,以避免关键路径上的死代码消除,而不影响基准性能。当前的支持以CompileCommand的形式实现,可访问为-XX:CompileCommand=blackhole,,并计划最终将其毕业到公共API。
JMH已经能够在指示/可用时自动检测和使用此设施。有关后续步骤,请查阅JMH文档。
HotSpot JVM中的新类层次结构分析实现(JDK-8266074)
hotspot/compiler
HotSpot JVM中引入了一个新的类层次结构分析实现。它的特点是对抽象和默认方法的增强处理,从而改进了JIT编译器所做的内联决策。新实现将取代原始实现,并在默认情况下打开。
为了帮助诊断与新实现相关的可能问题,可以通过指定 -XX:+UnlockDiagnosticVMOptions -XX:-UseVtableBasedCHA命令行标志来打开原始实现。
原始实现可能会在未来的版本中删除。
JEP 391: macOS/AArch64端口(JDK-8251280)
hotspot/compiler
macOS 11.0现在支持AArch64体系结构。此JEP在JDK中实现了对macos-aarch64平台的支持。添加的功能之一是支持W^X(write xor execute)内存。它仅对macos-aarch64启用,并可以在某些时候扩展到其他平台。JDK可以在英特尔计算机上交叉编译,也可以在基于Apple M1的计算机上编译。
有关更多详细信息,请参见JEP 391
统一日志支持异步日志刷新(JDK-8229517)
hotspot/runtime
为了避免使用统一日志记录的线程中出现不希望的延迟,用户现在可以请求统一日志记录系统在异步模式下运行。这可以通过传递命令行选项-Xlog:async来完成。在异步日志记录模式下,日志站点将所有日志记录消息入队到缓冲区。独立线程负责将它们刷新到相应的输出。中间缓冲区是有界的。缓冲区耗尽时,入队消息将被丢弃。用户可以使用命令行选项-XX:AsyncLogBufferSize=.来控制中间缓冲区的大小。
ARM上的macOS早期访问可用(JDK-8266858)
infrastructure/build
新的macOS现在可用于ARM系统。ARM端口的行为应与英特尔端口类似。没有已知的功能差异。在macOS上报告问题时,请指定是使用ARM还是x64。
支持在Keytool -genkeypair命令中指定签名者(JDK-8260693)
security-libs/java.security
-signer和-signerkeypass选项已添加到keytool实用程序的-genkey对命令中。-signer选项指定签名者的私钥条目的密钥库别名,-signerkeypass选项指定用于保护签名者私钥的密码。这些选项允许keytool -genkey对使用签名者的私钥对证书进行签名。这对于生成具有密钥协商算法作为公钥算法的证书特别有用。
SunJCE提供程序通过AES密码支持KW和KWP模式(JDK-8248268)
security-libs/javax.crypto
SunJCE提供程序已得到增强,以支持AES密钥换行算法(RFC 3394)和带填充算法的AES密钥换行算法(RFC 5649)。在早期版本中,SunJCE提供程序在“AESWrap”密码算法下支持RFC 3394,该算法只能用于包装和解包装密钥。通过此增强,增加了两种分组密码模式,KW和KWP,支持使用AES进行数据加密/解密和密钥包装/解包装。有关更多详细信息,请查看“JDK提供程序文档”指南的“SunJCE提供程序”部分。
新SunPKCS11配置属性(JDK-8240256)
security-libs/javax.crypto:pkcs11
SunPKCS11提供程序添加了新的提供程序配置属性,以更好地控制本机资源的使用。SunPKCS11提供程序使用本机资源以便与本机PKCS11库一起工作。为了管理和更好地控制本机资源,添加了额外的配置属性,以控制清除本机引用的频率,以及是否在注销后销毁基础PKCS11令牌。
SunPKCS11提供程序配置文件的3个新属性是:
destroyTokenAfterLogout (布尔值,默认值为false)如果设置为true,则在SunPKCS11提供程序实例上调用java.security.AuthProvider.logout() 时,基础令牌对象将被销毁,资源将被释放。这基本上会在logout() 调用后使SunPKCS11提供程序实例不可用。请注意,不应将此属性设置为true的PKCS11提供程序添加到系统提供程序列表中,因为提供程序对象在logout() 方法调用后不可用。
cleaner.shortInterval(整数,默认值为2000,以毫秒为单位)这定义了在繁忙期间清除本机引用的频率,即cleaner线程应多久处理队列中不再需要的本机引用以释放本机内存。请注意,cleaner线程将在200次失败尝试后切换到“longInterval”频率,即在队列中找不到引用时。
cleaner.longInterval(整数,默认值为60000,以毫秒为单位)这定义了在非繁忙期间检查本机引用的频率,即cleaner线程应检查队列中的本机引用的频率。请注意,如果检测到用于清理的本机PKCS11引用,cleaner线程将切换回“短间隔”值。
具有系统属性的可配置扩展(JDK-8217633)
security-libs/javax.net.ssl
已添加两个新的系统属性。系统属性jdk.tls.client.disableExts用于禁用客户端中使用的TLS扩展。系统属性jdk.tls.server.disableExts用于禁用服务器中使用的TLS扩展。如果禁用了扩展,则在握手消息中既不会生成也不会处理扩展。
属性字符串是在IANA文档中注册的逗号分隔的标准TLS扩展名称列表(例如,server_name、status_request和签名_algorithms_cert)。请注意,扩展名区分大小写。未知、不支持、拼写错误和重复的TLS扩展名称令牌将被忽略。
请注意,阻止TLS扩展的影响是复杂的。例如,如果禁用了强制扩展,则可能无法建立TLS连接。请不要禁用强制扩展,除非您清楚地了解其影响,否则不要使用此功能。
包摘要页面上的“Related Packages”(JDK-8260388)
tools/javadoc(tool)
软件包的摘要页面现在包括一个列出任何“Related Packages”的部分。Related Packages(相关软件包)是根据常见命名约定启发式确定的,可能包括以下内容:
“parent”包(即,包是子包的包)
同级包(即具有相同父包的其他包)
任何子包
相关软件包不一定都在同一个模块中。
参考资料:
https://en.wikipedia.org/wiki/Java_version_history
http://gcc.uni-paderborn.de/www/WI/WI2/wi2_lit.nsf/64ae864837b22662c12573e70058bbb4/abf8d70f07c12eb3c1256de900638899/$FILE/Java%20Technology%20-%20An%20early%20history.pdf
https://en.wikipedia.org/wiki/Oak_(programming_language)
https://www.javatpoint.com/history-of-java
https://www.oracle.com/technetwork/java/javase/archive-139210.html
总结
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、收藏,您的支持是我坚持写作最大的动力。