在比JDK 8更高的版本中,Java性能得到了多方面的优化,主要集中在以下几个方面:
-
内存管理与垃圾回收(GC)改进:
- G1垃圾收集器的增强:从JDK 9开始,G1(Garbage First)垃圾收集器成为默认的垃圾收集器,并在后续版本中不断优化,如JDK 10中的并行全GC(Parallel Full GC),以及JDK 11中对G1的自动内存管理能力进一步提升,减少了用户手动调优的需求。
- ZGC和Shenandoah垃圾收集器: 引入了低延迟的Z Garbage Collector (ZGC)于JDK 11作为实验性功能,并在JDK 15中将其稳定化。同时,Shenandoah垃圾收集器也在JDK 12中引入为实验性特性,最终在JDK 15达到生产就绪状态。这两个收集器都致力于实现低停顿时间,特别适合对响应时间有严格要求的应用场景。
-
启动时间和运行时性能提升:
- 应用类数据共享(CDS)和AppCDS: 从JDK 5开始引入Class Data Sharing (CDS),允许将部分JVM加载的类元数据在多个JVM实例间共享,从而减少启动时间。JDK 10及之后版本通过Application Class-Data Sharing (AppCDS)扩展了这一特性,使得不仅JDK类,用户应用程序的类也可以被共享,显著降低了大型应用的启动时间。
-
语言和编译器优化:
- JIT编译器改进:从JDK 9开始,即时编译器(JIT)持续得到优化,包括更智能的编译策略、更好的代码矢量化支持等,提高了代码执行效率。
- 局部变量类型推断:JDK 10引入了局部变量类型推断(var关键字),简化了编码,虽然这不直接提升运行时性能,但有助于提高开发效率和代码可读性。
-
模块系统与性能间接提升:
- Java Platform Module System (JPMS):自JDK 9起引入的模块系统,通过模块化打包和加载,可以减少应用启动时的类路径扫描开销,间接提升了应用的启动速度和内存使用效率。
-
其他底层优化:
- Vector API: JDK 16引入了Vector API预览版,它提供了硬件加速的向量运算能力,对于科学计算、大数据处理等领域有显著性能提升潜力。
- 字符串去重复(String Deduplication):在更高版本中,字符串去重复机制得到加强,减少了内存占用,尤其是在大量字符串操作的应用中效果明显。
综上所述,从JDK 9到后续版本,Java在内存管理、启动时间、运行时性能、语言特性和底层架构上均进行了大量的优化工作,这些改进共同推动了Java应用的整体性能提升。