JShell 简介 JShell(Java Shell)实现 REPL(Read-Eval-Print Loop),在命令行即时执行 Java 代码片段,无需编写完整类、编译、运行,极大提升探索、原型验证、教学效率。 启动与基础命令 常用命令 命令功能 /help显示帮助 /list列出已输入片段 /edit <id>编辑指定片段 /drop <id>删除片段 /save [-all|-history|-start] <file>保存片段到文件 /open <file>加载文件作为输入 /vars列出变量及值 /methods列出方
模块系统核心增强 链接时:编译期与运行期之间的新阶段,使用 jlink 组装优化模块,生成定制运行时镜像。 模块路径:javac、jlink、java 新增 --module-path 定位模块定义。 模块化 JAR:根目录含 module-info.class 的 JAR。 JMOD 格式:类似 JAR 但可包含原生代码、配置文件,供 jlink 使用。 创建模块实战 步骤 1:目录结构 C:\JAVA\src\com.tutorialspoint.greetings\module-info.java C:\JAVA\src\com.tutorialspoint.greetings\c
本地环境配置步骤 1. 下载 JDK 访问 Oracle 官网或 OpenJDK 下载适配操作系统的 JDK 9 安装包。 2. 安装与环境变量配置 Windows 10/11 右键“此电脑” → “属性” → “高级系统设置” → “环境变量”。 新建系统变量 JAVA_HOME = JDK 安装路径(如 C:\Program Files\Java\jdk-9)。 编辑 Path,添加 %JAVA_HOME%\bin。 Windows 7/8 (传统) 编辑 Path,末尾追加 ;C:\Program Files\Java\jdk-9\bin。 Linux / macOS /
Java 9 发布目标 Java 9 于 2017 年 9 月 21 日发布,核心目标: 模块化:引入模块系统,使 JDK 可裁剪适配小型设备。 安全增强:强化 JDK 与 Java 实现的整体安全性。 构建与维护:简化大型代码库与 Java SE/EE 应用的构建维护。 标准模块系统:为平台与 JDK 设计统一的模块体系。 90+ 增强中的关键特性 特性说明 模块系统 (Jigsaw)命名的、自描述的代码与数据集合,支持强封装、显式依赖、可靠配置。 JShell (REPL)交互式编程环境,支持即时执行表达式、语句、声明,无需编译运行周期。 HTTP/2 Client全新 ja
JEP 312:线程局部握手 Java 10 引入 JVM 选项 -XX:+ThreadLocalHandshakes(仅 x64 与 SPARC 架构支持),允许 JVM 在不触发全局安全点的情况下,对单个应用线程执行回调操作。 核心机制 传统安全点:所有线程同步停顿,等待 VM 操作完成(如偏向锁撤销、类卸载、栈扫描)。 线程局部握手:VM 向目标线程发送握手请求,目标线程在安全点轮询点响应,执行回调,其他线程继续运行。 性能收益 减少全局安全点频率与持续时间,降低“Stop-the-World”影响。 提升高并发、大线程数应用的吞吐与尾延迟表现。 特别利于偏向锁撤销、线程本地存
JEP 319:根证书 Java 10 前,OpenJDK 构建中的 cacerts 密钥库为空,导致 TLS/HTTPS 等安全协议默认无法建立信任链,必须手动导入证书。 变革内容 Oracle 将 Oracle Java SE Root CA 计划的根证书开源贡献给 OpenJDK。 OpenJDK 构建现默认包含一组根证书,可直接验证主流 CA 签发的服务器证书。 缩小 OpenJDK 与 Oracle JDK 在安全功能上的差距。 证书来源与治理 证书由 Oracle Java SE Root CA 计划 签发。 已签署协议的 CA 厂商证书纳入集合。 未注册厂商证书将在后续
JEP 296:整合 JDK 森林为单一仓库 JDK 9 采用多仓库(Forest)结构,包含 8 个模块仓库: root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn 代码组织形如: $ROOT/jdk/src/java.base/... $ROOT/langtools/src/java.compiler/... Java 10 单仓库结构 合并为单一仓库,代码组织扁平化: $ROOT/src/java.base/ $ROOT/src/java.compiler/ $ROOT/src/hotspot/... 收益 原子提交:
JEP 316:堆分配在替代内存设备 Java 10 允许指定替代内存设备(如 NV-DIMM 非易失性内存)作为 Java 堆分配位置,通过新选项 -XX:AllocateHeapAt 实现。 使用语法 java -XX:AllocateHeapAt=/path/to/nvdimm/mountpoint -Xmx4g -Xms4g YourApp 参数为文件系统路径,JVM 通过内存映射(mmap)实现堆分配。 原有堆选项 -Xmx、-Xms、-Xmn 等继续生效,限制堆大小范围。 典型场景 大内存数据库/缓存:堆驻留 NV-DIMM,重启后数据可快速恢复(配合持久化框架)。 高密
JEP 314:Unicode 语言标签扩展 Java 7 引入 BCP 47 语言标签支持,但 Unicode 区域扩展仅限日历与数字。Java 10 依据 LDML 规范扩展 java.util.Locale 及相关类,新增 4 类扩展键: 键含义示例值 cu货币类型USD、EUR、CNY fw一周的第一天mon、sun、sat rg区域覆盖USZZZZ、CNZZZZ tz时区America/New_York、Asia/Shanghai 语言标签示例:zh-CN-u-cu-CNY-fw-mon-tz-Asia/Shanghai 更新的核心 API 以下类/方法现支持解析与格式
JEP 304:垃圾收集器接口 Java 10 前,GC 实现分散在代码库中,难以替换隔离。JEP 304 引入统一 GC 接口,使替代 GC 实现可插拔,同时将 GC 代码与核心 VM 隔离,便于维护与新算法引入。 核心价值: 新 GC 算法开发无需侵入核心 VM 代码。 便于实验性/专用 GC(如 ZGC、Shenandoah 前身)集成。 代码库模块化,降低耦合。 JEP 307:G1 并行 Full GC Java 9 引入 G1(Garbage First)收集器,设计目标避免 Full GC。但当并发线程回收跟不上分配速率时,G1 退化为单线程 标记-清理-压缩 Full G
JEP 310:应用类数据共享 JVM 启动时需加载类到内存,多 JAR 场景下首次请求延迟明显。在 Serverless 等对冷启动敏感的架构中,启动时间至关重要。 Java 5 引入 CDS(Class Data Sharing),仅限 Bootstrap 类。Java 10 扩展为 AppCDS,允许将应用类放入共享归档,跨多个 Java 进程共享类元数据,显著降低启动时间与内存占用。 三步流程 步骤 1:生成类列表 java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=welcome.lst -cp welcome.jar
JEP 317:实验性 Java 版 JIT 编译器 传统 JIT 编译器(C1/C2)由 C++ 实现。Java 10 引入 Graal——一个完全用 Java 编写的实验性 JIT 编译器,基于 Java 9 引入的 JVMCI (JVM Compiler Interface),可作为插件动态加载到 JVM。 启用方法 java -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler YourApp -XX:+UnlockExperimentalVMOptions:解锁实验性选项。 -XX:+UseJVMCICompiler:启用基
Java 10 标记为 forRemoval=true 的废弃项 以下 API/模块在 Java 10 被正式废弃并标记为未来版本移除,开发者应尽快规划迁移。 1. SNMP 监控模块 jdk.snmp 模块:提供 JVM SNMP 监控与管理支持,标记 forRemoval=true。 2. 旧安全类 java.security.Certificate java.security.Identity java.security.IdentityScope java.security.Signer 均标记 forRemoval=true,建议迁移至 java.security.cer
已移除项目汇总 Java 10 清理了大量长期废弃的 API、工具与选项,减少维护负担、精简运行时体积。 1. Swing LookAndFeel 类名变更 Nimbus 与 Aqua 旧类名移除,需迁移至新包路径: // Nimbus 旧 → 新 UIManager.setLookAndFeel(com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel); // → UIManager.setLookAndFeel(javax.swing.plaf.nimbus.NimbusLookAndFeel); // Aqua 旧 → 新 UIManager
核心 API 增强 1. Optional.orElseThrow() java.util.Optional 新增 orElseThrow() 无参重载,作为 get() 的首选替代: // 旧:get() 抛出 NoSuchElementException,语义不明 String value = optional.get(); // 新:明确表达“为空则抛出异常”意图 String value = optional.orElseThrow(); // 抛出 NoSuchElementException 2. 不可变集合工厂方法 List、Set、Map 新增 copyOf() 静态方
JEP 286:局部变量类型推断 Java 10 引入 var 关键字,允许在声明局部变量时省略显式类型,由编译器根据初始化表达式推断类型。这是 Java 向类型推断迈出的重要一步,显著减少样板代码。 语法对比 // 旧写法 String name = Welcome to tutorialspoint.com; List<String> list = new ArrayList<>(); Map<Integer, String> map = new HashMap<>(); // 新写法(Java 10+) var name = Welcom
JEP 322:时间驱动的版本控制模型 Java 10 起确立严格的 时间驱动发布模型:每 6 个月发布一个大版本(3 月、9 月),版本号采用新格式: $FEATURE.$INTERIM.$UPDATE.$PATCH 版本号各段含义 段名称含义 $FEATURE特性版本号每次特性发布递增 1,Java 10 为 10。 $INTERIM临时版本号非特性、非更新发布(仅修复/增强),不含不兼容变更。特性发布时为 0。 $UPDATE更新版本号特性发布后的更新发布计数,如 10.0.1(4 月)、10.0.2(7 月)。 $PATCH补丁版本号仅用于紧急修复关键问题的应急发布。
在线体验环境 教程提供 Live Demo 在线编译运行功能,无需本地安装即可验证代码示例。页面右上角点击即可进入在线编译器,支持修改代码并实时查看结果。 本地环境搭建步骤 1. 下载 JDK 访问 Oracle 官网或 OpenJDK 站点下载适合操作系统的 JDK 安装包(.exe/.tar.gz/.dmg)。 2. 安装与配置环境变量 安装完成后需配置 PATH 指向 jdk/bin 目录。 Windows 10/11(通用现代方式) 右键“此电脑” → “属性” → “高级系统设置” → “环境变量”。 在“系统变量”编辑 Path,新增 %JAVA_HOME%\bin。 新建
Java 10 发布背景 Java 10 于 2018 年 3 月 20 日发布,是 Java 发布节奏变革的里程碑版本。Oracle 确立了 6 个月一次的特性发布节奏 与 LTS(长期支持)模型: 特性发布:每 3 月、9 月发布,包含新语言特性、JVM 改进、API 增强等。 更新发布:每季度(1、4、7、10 月)发布,仅含错误修复、安全补丁、回归修复。 LTS 发布:每 3 年(从 2018 年 9 月 Java 11 开始),提供 3 年商业支持,面向生产环境。 Java 9 与 10 为非 LTS 版本,Java 11 为首个 LTS 版本。 Oracle JDK 与 Op
Java 语言支持三类注释: 序号注释及描述 1/* text */编译器忽略 /* 到 */ 之间的所有内容。 2//text编译器忽略 // 到行尾的所有内容。 3/** documentation */这是文档注释,通常称为 doc comment。JDK javadoc 工具在生成自动文档时使用 doc comments。 本章详解 Javadoc,展示如何利用 Javadoc 为 Java 代码生成有用文档。 什么是 Javadoc? Javadoc 是随 JDK 提供的工具,用于从 Java 源代码按预定义格式生成 HTML 格式的 Java 代码文档。 下面简单示例中 /*…
java