Skip to main content

Java 8

核心总结

  • Lambda 与 Stream 时代开始。JEP 机制在 JDK 8 已覆盖大量平台工作,但 Java 8 的核心是 JSR 335 Lambda、JSR 310 Date Time、Nashorn、PermGen 移除和集合并行处理。

升级关注

  • 关注 Lambda/Stream 对调试栈和性能模型的影响。
  • PermGen 移除后,旧的 PermGen 参数需要迁移到 Metaspace 参数。

示例

Lambda / Stream / Optional

import java.util.*;
import java.util.stream.*;

List<String> names = Arrays.asList("alice", "bob", "amy");
List<String> result = names.stream()
.filter(v -> v.startsWith("a"))
.map(String::toUpperCase)
.collect(Collectors.toList());

Optional<String> first = result.stream().findFirst();

java.time

import java.time.*;

LocalDate today = LocalDate.now();
ZonedDateTime nextRun = today.plusDays(1).atStartOfDay(ZoneId.systemDefault());

CompletableFuture

import java.util.concurrent.*;

CompletableFuture.supplyAsync(() -> "hello")
.thenApply(String::toUpperCase)
.thenAccept(System.out::println);

JEPs

JEP状态分类标题中文描述
JEP 101正式库/APIGeneralized Target-Type Inference增强泛型目标类型推断,让方法调用和菱形语法更自然。
JEP 104正式库/APIAnnotations on Java Types支持类型使用位置注解,是 Checker Framework 等静态分析的基础。
JEP 107正式库/APIBulk Data Operations for Collections集合批量数据操作,支撑 Stream 风格处理。
JEP 109正式语言Enhance Core Libraries with Lambda核心库适配 Lambda,例如集合、Map、并发工具等 API 增强。
JEP 118正式库/APIAccess to Parameter Names at Runtime可在运行时读取方法参数名,需编译时保留参数元数据。
JEP 120正式库/APIRepeating Annotations允许同一种注解在同一位置重复出现。
JEP 122移除/禁用库/APIRemove the Permanent Generation移除 PermGen,改用 Metaspace。
JEP 126正式语言Lambda Expressions & Virtual Extension MethodsLambda 表达式和接口默认方法,是 Java 8 最核心语言变化。
JEP 135正式库/APIBase64 Encoding & Decoding标准库内置 Base64 编解码。
JEP 150正式库/APIDate & Time API引入 java.time,替代 Date、Calendar 的主要使用场景。
JEP 155正式库/APIConcurrency UpdatesCompletableFuture、StampedLock、并发集合等增强。
JEP 174正式工具/平台Nashorn JavaScript Engine引入 Nashorn JS 引擎,后续 Java 15 移除。
JEP 180正式库/APIHandle Frequent HashMap Collisions with Balanced TreesHashMap 碰撞严重时桶内转红黑树,降低退化风险。

References