java_platform.md

Java 平台

Java 开源研发模式

  • JCP Java 社区进程
    • Java 社区形式化和标准化 Java 的过程
      • 开发商或公司等感兴趣的团体在这个过程中一起合作来发展这个平台
    • 通过 JSR (Java 规划请求) 进行任何 Java 技术的改进和引入新技术
      • 为什么需要一个新的规范
      • 规范的目标, 所依赖的技术
    • 定义参与的角色和推动 JSR 的发布所涉及的工作流
    • 会员资格
      • 签署准会员协议 (AMA) ,合作伙伴协议 (PMA), Java 规范参与协议 (JSPA)
      • 成为准会员, 合作伙伴会员或正式会员
    • 执行委员会 EC
      • 该小组的成员必须分析, 评论, 投票并决定批准提交给该计划的所有 JSR
      • 除了指导整个平台的演变之外, 也负责 JCP 计划本身使其遵守社区对计划及其成员的期望
    • 专家组
      • JSR 获得批准后, 规范负责人将开始组建一个专家组和一个贡献者团队来处理规范
    • 最终草案
      • 公众评审获得成功,专家组将通过完成对评论做出回应所需的任何修改来准备规范的最终草案
        • 这个阶段,JSR 将作为规范和参考实现完成, 此外规范负责人和专家组负责完成 TCK

Java 各版本特性

  • 链接 https://openjdk.java.net/projects/jdk/ $version if $version >= 10 https://openjdk.java.net/jeps/ $number-of-jep

  • 1.0 Oak 1996-01-23

    • 纯解释执行, 外挂 JIT, 性能比较差
  • 1.1 1997-02-19

    • JDBC
    • 支持内部类
    • RMI
    • 反射
    • Java Bean
  • 1.2 Playground 1998-12-08

    • JIT 编译器
    • 对打包的 Java 文件进行数字签名
    • JFC (Java Foundation Classes), 包括 Swing 1.0, 拖放和 Java2D library
    • Java 插件
    • JDBC 中引入可滚动结果集, BLOB, CLOB, 批量更新和用户自定义类型
    • Applet 中增加声音支持
  • 1.3 Kestrel

    • Java Sound API
    • jar 文件索引
    • 对 Java 的各个方面都做了大量的优化和增强
  • 1.4 Merlin 2002-02-13

    • XML 处理
    • Java 打印服务
    • Logging API
    • Java Web Start
    • JDBC 3.0 API
    • 断言
    • Preferences API
    • 链式异常处理
    • 支持 IPV6
    • 支持正则表达式
    • 引入 Image I/O API
  • 5 Tigger 2004-09-30

    • 泛型
    • 增强循环, 可以使用迭代方法
    • 自动装箱和拆箱
    • 类型安全的枚举
    • 可变参数
    • 静态引入
    • 注解
    • Instrumentation
  • 6 Mustang 2006-12-11

    • 支持脚本语言
    • JDBC 4.0API
    • Java Compiler API
    • 可插拔注解
    • 增加对 Native PKI (Public Key Infrastructure),Java GSS(Generic Security Service), Kerberos 和 LDAP (Lightweight Directory Accesss Protocol)支持
    • 继承 Web Services
  • 7 Dolphin 2011-07-28

    • switch 语句块中允许以字符串作为分支条件
    • 在创建泛型对象时应用类型推断
    • 在一个语句块中捕获多种异常
    • 支持动态语言
    • 支持 try-with-resources
    • 引入 Java NIO
    • 数值类型可以使用二进制字符串表示 (可在字符串中添加下划线)
    • 钻石型语法 (在创建泛型对象时应用类型推断)
  • 8 2014-03-18

    • Lambda 表达式
      • Lambda 允许把函数作为参数传递进方法中
    • 方法引用
    • 默认方法
    • 新编译工具 jis、deps
    • Stream API
      • java.util.stream 把真正的函数式编程风格引入到 Java 中
    • DateTime API
    • Optional
    • Nashorm Javascript Engine
  • 9 2017-09-22

    • 模块系统 Jigsaw 项目
    • REPL JShell
    • HTTPClient API
      • 支持 WebSocket 和 HTTP2 流以及服务器推送特性
    • 改进的 JavaDoc, 支持在 API 文档中进行搜索
    • 多版本兼容 JAR 包
      • 创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本
    • 集合工具方法
      • List/Set/Map 接口中, 新的静态工厂方法可以创建这些集合的不可变实例
    • 私有接口方法
      • 在接口中使用 private 私有方法
    • 改进的进程 API 来控制和管理操作系统进程
    • 改进 Stream API
      • 使用收集器编写复杂的查询
    • 改进 try-with-resources
      • 使用 final 变量
    • 改进 @Deprecated 注解
    • 改进钻石操作符支持匿名类
    • 改进 Optional
      • 增加了新的方法, 支持转为 stream
    • 多分辨率图像 API
    • 改进 CompletableFuture API
      • 异步机制可以在 ProcessHandle.onExit 方法退出时执行操作
    • 轻量级 JSON API
    • Reactive Stream API
      • 支持响应式编程模式
  • 10 2018-03-20

    • JEP286 var 局部变量类型推断
    • JEP296 将原来 Mercurial 管理的众多 JDK 仓库代码合并到一个仓库中, 简化开发和管理过程
    • JEP304 统一的垃圾回收接口
    • JEP307 G1 垃圾回收器的并行完整的垃圾回收, 实现并行来改善最坏情况下的延迟
    • JEP310 APPCDS, 通过跨进程共享通用类元数据来减少内存占用空间和减少启动时间
    • JEP312 ThreadLocal 握手交互, 在不进入到全局 JVM 安全点 (safepoint)的情况下, 对线程执行回调
      • 优化可以只停止单个线程, 而不是全部
    • JEP313 移除 JDK 中附带的 javah 工具
      • 使用 javac -h 代替
    • JEP314 使用附加的 Unicode 语言标记扩展
    • JEP317 能将堆内存占用分配给用户指定的备用内存设备
      • 使用 Graal 基于 Java 的编译器, 可以预先把 Java 代码编译成本地代码来提升效能
    • JEP318 在 OpenJDK 中提供一组默认的根证书颁发机构证书
      • 开源目前 Oracle 提供的 JavaSE 的根证书
    • JEP322 基于时间定义的发布版本
      • $FEATURE.$INTERIM.$UPDATE.$PATCH
  • 11 2018-09-25

    • JEP181 Nest-Based 访问控制
    • JEP309 动态类文件常量
    • JEP315 改善 Aarch64 intrinsic
    • JEP318 Epsilon 空垃圾回收器
    • JEP320 清除 JavaEE 和 CORBA 模块
    • JEP321 HTTP 客户端
    • JEP323 lamda 局部变量语法参数
    • JEP324 Curve25519 和 Curve448 关键协议
    • JEP327 Unicode 10
    • JEP328 飞行记录器
    • JEP329 ChaCha20 和 Poly1305 加密算法
    • JEP330 直接从源代码运行
    • JEP331 低开销堆分析
    • JEP332 TLS1.3
    • JEP333 ZGC 一个可伸缩低延迟垃圾回收器
    • JEP335 弃用 Nashorn Javascript Engine
    • JEP336 弃用 Pack200 工具和 API
  • 12 2019-03-19

    • JEP189 Shenandoah 垃圾回收期 通过在 Java 线程运行同时进行疏散 (evacuation) 工作来减少停顿
    • JEP230 JMH 微基准测试, 测试 JDK 的性能
    • JEP325 switch 语句作为语句或表达式, 简化日常代码
    • JEP334 JVM Constants API
    • JEP340 One Aarch64 Port
    • JEP341 默认生成类数据共享 CDS 存档
    • JEP344 Aborable Mixed Collections for G1
      • 当 G1 垃圾回收期的回收超过暂停目标, 则中止垃圾回收过程
    • JEP346 Promptly Return Unused Committed Memory from G1
  • 13 2019-09-17

    • JEP350 Dynamic CDS Achives
      • 允许在 Java 应用执行结束时动态归档类
    • JEP351 ZGC Uncommit Unused Memory
    • JEP353 Reimplement the Legacy Socket API
    • JEP354 Switch Expression (Preview)
    • JEP355 Text Blocks (Preview)
  • 14 2020-03-17

    • JEP305 Pattern Matching for instanceof (Preview)
    • JEP343 Packaging Tool (Incubator)
    • JEP345 NUMA-Aware Memory Allocation for G1
    • JEP349 JFR Event Streaming
    • JEP352 Non-Volatile Mapped Byte Buffers
    • JEP358 Helpful NullPointerExceptions
    • JEP359 Records (Preview)
    • JEP361 Switch Expressions (Standard)
    • JEP362 Deprecate the Solaris and SPARC Ports
    • JEP363 Remove the Concurrent Mark Sweep (CMS) Garbage Collector
    • JEP364 ZGC on macOS
    • JEP365 ZGC on Windows
    • JEP366 Deprecate the ParallelScavenge + SerialOld GC Combination
    • JEP367 Remove the Pack200 Tools and API
    • JEP368 Text Blocks (Second Preview)
    • JEP370 Foreign-Memory Access API (Incubator)
  • 15 2020-09-15

    • JEP339 Edwards-Curve Digital Signature Algorithm (EdDSA)
      • 蒙哥马利与扭曲爱德华曲线签名算法
    • JEP360 Sealed Classes (Preview)
    • JEP371 Hidden Classes
    • JEP372 Remove the Nashorn JavaScript Engine
    • JEP373 Reimplement the Legacy DatagramSocket API
    • JEP374 Disable and Deprecate Biased Locking
    • JEP375 Pattern Matching for instanceof (Second Preview)
    • JEP377 ZGC: A Scalable Low-Latency Garbage Collector
    • JEP378 Text Blocks
    • JEP379 Shenandoah: A Low-Pause-Time Garbage Collector
    • JEP381 Remove the Solaris and SPARC Ports
    • JEP383 Foreign-Memory Access API (Second Incubator)
    • JEP384 Records (Second Preview)
    • JEP385 Deprecate RMI Activation for Removal
  • 16 2021-03-16

    • JEP338 Vector API (Incubator)
    • JEP347 Enable C++14 Language Features
    • JEP357 Migrate from Mercurial to Git
    • JEP369 Migrate to GitHub
    • JEP376 ZGC: Concurrent Thread-Stack Processing
    • JEP380 Unix-Domain Socket Channels
    • JEP386 Alpine Linux Port
    • JEP387 Elastic Metaspace
    • JEP388 Windows/AArch64 Port
    • JEP389 Foreign Linker API (Incubator)
    • JEP390 Warnings for Value-Based Classes
    • JEP392 Packaging Tool
    • JEP393 Foreign-Memory Access API (Third Incubator)
    • JEP394 Pattern Matching for instanceof
    • JEP395 Records
    • JEP396 Strongly Encapsulate JDK Internals by Default
    • JEP397 Sealed Classes (Second Preview)
  • 17 2021-09-14

    • JEP306 Restore Always-Strict Floating-Point Semantics
    • JEP356 Enhanced Pseudo-Random Number Generators
    • JEP382 New macOS Rendering Pipeline
    • JEP391 macOS/AArch64 Port
    • JEP398 Deprecate the Applet API for Removal
    • JEP403 Strongly Encapsulate JDK Internals
    • JEP406 Pattern Matching for switch (Preview)
    • JEP407 Remove RMI Activation
    • JEP409 Sealed Classes
    • JEP410 Remove the Experimental AOT and JIT Compiler
    • JEP411 Deprecate the Security Manager for Removal
    • JEP412 Foreign Function & Memory API (Incubator)
    • JEP414 Vector API (Second Incubator)
    • JEP415 Context-Specific Deserialization Filters
  • 18 2022-03-22

    • JEP400 UTF-8 by Default
    • JEP408 Simple Web Server
    • JEP413 Code Snippets in Java API Documentation
    • JEP416 Reimplement Core Reflection with Method Handles
    • JEP417 Vector API (Third Incubator)
    • JEP418 Internet-Address Resolution SPI
    • JEP419 Foreign Function & Memory API (Second Incubator)
    • JEP420 Pattern Matching for switch (Second Preview)
    • JEP421 Deprecate Finalization for Removal
  • 19 2022-09-20

    • JEP405 Record Patterns (Preview)
    • JEP422 Linux/RISC-V Port
    • JEP424 Foreign Function & Memory API (Preview)
    • JEP425 Virtual Threads (Preview)
    • JEP426 Vector API (Fourth Incubator)
    • JEP427 Pattern Matching for switch (Third Preview)