当前位置: 首页 > news >正文

JVM1.8与1.9的区别是什么?

一、核心机制变化

  1. 类加载器调整
    • JDK 1.8:使用三种类加载器:
      • 启动类加载器(Bootstrap):加载核心类库(如 rt.jar)。
      • 扩展类加载器(ExtClassLoader):加载 JAVA_HOME/lib/ext 目录下的扩展类。
      • 应用类加载器(AppClassLoader):加载 classpath 中的应用类。
    • JDK 1.9:
      • 扩展类加载器被移除,替换为 平台类加载器(PlatformClassLoader),负责加载 JDK 模块化系统(JPMS)中的非核心模块(如 java.sql)。
      • 应用类加载器层级调整:父加载器变为平台类加载器,仅加载 classpath 中的类。
  2. 模块化系统(JPMS)
    • JDK 1.9 引入 Project Jigsaw,将 JDK 本身拆分为多个模块(如 java.basejava.sql),通过 module-info.java 声明模块依赖,增强封装性和安全性。
    • 影响:非公开模块无法直接访问,需显式声明依赖,解决传统 classpath 的复杂性问题。

二、语言与API特性

  1. Lambda与函数式编程
    • JDK 1.8:首次引入 Lambda表达式 和 Stream API,支持函数式编程,简化集合操作。
    • JDK 1.9:未新增函数式特性,但优化了接口私有方法(允许在接口中定义私有方法,提升代码复用性)。
  2. 集合工厂方法
    • JDK 1.9:新增 List.of()Map.of() 等工厂方法,支持快速创建不可变集合,替代 Collections.unmodifiable 的繁琐写法。
  3. 多版本兼容JAR(MVJAR)
    • JDK 1.9:支持在单个JAR中兼容不同JDK版本的类文件,通过 META-INF/versions 目录实现,便于迁移旧代码。

三、工具与调试增强

  1. JShell(REPL工具)
    • JDK 1.9:引入 JShell,支持交互式执行Java代码片段,无需定义类或 main 方法,提升调试效率。
  2. Javadoc升级
    • JDK 1.9:支持 HTML5格式 的API文档,增强可读性和搜索功能。
  3. 内存诊断工具
    • JDK 1.9:新增 jcmd 命令,可实时诊断堆内存使用情况,优化问题排查流程。

四、垃圾回收器优化

  1. G1收集器成为默认
    • JDK 1.8:默认使用 Parallel Scavenge + Parallel Old(注重吞吐量)或 CMS(低延迟)。
    • JDK 1.9:默认切换为 G1收集器,通过区域化内存管理(Region)和优先级回收,平衡吞吐量与停顿时间。
  2. 内部优化
    • JDK 1.9:改进G1的并行压缩算法,减少Full GC频率,提升大堆内存场景性能。

五、其他关键改进

  • HTTP/2客户端:JDK 1.9引入标准化HTTP/2 API,替代遗留的 HttpURLConnection,支持WebSocket。
  • 进程API增强:新增 Process.getCurrentPid() 等方法,简化进程管理。
  • 锁机制优化:改进锁争用策略,降低高并发场景下的性能损耗。

总结

特性JDK 1.8JDK 1.9
类加载器ExtClassLoader加载扩展类平台类加载器(PlatformClassLoader)
模块化JPMS模块化系统
默认GCParallel/CMSG1
新工具JShell、jcmd
核心语言特性Lambda、Stream API接口私有方法、集合工厂方法

开发者建议:

  • 升级必要性:若项目需模块化支持或低延迟GC,优先升级至JDK 1.9+;
  • 兼容性注意:模块化系统可能影响旧代码访问内部API,需显式声明依赖。
http://www.xdnf.cn/news/1427941.html

相关文章:

  • 【系统架构设计(11)】软件测试全景解析:从方法论到实践策略
  • 面试tips--JVM(4)--Minor GC Major GC Full GC
  • STL库——deque/priority_queue
  • 【爬油管搜索视频软件】youtube爬虫工具,根据关键词采集搜到的视频数据
  • 数据分析与挖掘工程师学习规划
  • React学习教程,从入门到精通, React 入门指南:React JSX 语法知识点详解及案例代码(8)
  • 工业界实战之数据存储格式与精度
  • MySQL 事务隔离与 MVCC
  • MySQL事务+MVCC(精简版,包教包废)
  • 【彻底搞懂Java垃圾回收机制(附调优参数)】
  • 从电脑底层到进程创建:一篇看懂冯诺依曼、OS和进程
  • 【Qt开发】按钮类控件(二)-> QRadioButton
  • 【译】更好地控制您的 Copilot 代码建议
  • ResponseBodyEmitter介绍
  • Linux IPv4路由子系统深度解析
  • 什么是Token?——理解自然语言处理中的基本单位
  • 基于单片机颜色识别分拣系统设计
  • AI 生成视频入门:用 Pika Labs+Runway ML 制作短内容
  • 4.MySQL数据类型
  • day42-单片机
  • 【Linux基础知识系列:第一百一十六篇】使用mt进行磁带驱动管理
  • 第三家公司虽然用了powerbi,但更适合用excel
  • Flutter环境搭建全攻略之-windows环境搭建
  • 奔赴MOBILITY China 2026深圳新能源汽车技术展,共鉴行业高光时刻
  • 从零开始在Ubuntu上快速部署Docker和Dify:结合 Dify + 蓝耘 MaaS平台打造 AI 应用实战指南
  • Web基础学习笔记01
  • 计算机视觉与深度学习 | 视觉里程计技术全解析:定义、原理、与SLAM的关系及应用场景
  • Spring Boot 日志框架选择指南:Logback vs Log4j2
  • 破解能源密码——人造太阳:可控核聚变技术进展
  • 光储充一体化智慧能源平台助力某能投公司绿色能源转型