diff --git a/docs/framework-1.1-plan.md b/docs/framework-1.1-plan.md
index 84375cc..7b3d466 100644
--- a/docs/framework-1.1-plan.md
+++ b/docs/framework-1.1-plan.md
@@ -12,7 +12,7 @@ Java 21 为编译和最低运行基线,以 JDK 21、25 为 CI 保障版本;J
| Spring Cloud | 2025.1.2 | 2025.1.2 | 已官方声明支持 Boot 4.1 |
| Spring Cloud Alibaba | 2025.1.0.0 | 待正式兼容版本 | 不使用上游 SNAPSHOT 发布 |
| Java | 21 | 编译 21;CI 21/25 | 两套完整构建、测试和 Javadoc 通过 |
-| 镜像 | Temurin 21 Alpine JVM | JDK/JRE 25 JVM;Linux amd64 Native | 非 root、日志、时区、健康检查均验证 |
+| 镜像 | Temurin 21 Alpine JVM | Temurin 25 Alpine JVM | 非 root、日志、时区、健康检查及容器内存参数均验证 |
Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;其 `2025.1.x` 分支虽已
切换到 Boot 4.1.0 和 Cloud 2025.1.2,但尚未发布为正式 BOM。Framework 可在保持已发布
@@ -23,7 +23,7 @@ Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;
### 阶段 1:构建矩阵与可复现基线(进行中)
-1. 在 `feature/1.1` 分支上维护所有变更,发布前再创建 `release/1.1.0`。
+1. 1.1.0 已作为升级基线发布;后续优化在 `feature/1.1.1-jvm-optimization` 上维护。
2. GitHub Actions 建立 JDK 21/25 矩阵,运行 `mvn -B verify javadoc:javadoc --file pom.xml`。
3. 在两套 JDK 下记录 Framework 全模块构建结果;任何 JDK 25 特有失败先修复构建插件或测试。
@@ -41,7 +41,7 @@ Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;
完成标准:JDK 21/25 的全模块 `verify` 与 Javadoc 均通过,且没有未解释的依赖覆盖。
-### 阶段 3:Native 能力和 Runtime Hints
+### 阶段 3:Native 能力和 Runtime Hints(延期)
1. 复用 Spring Boot 4.1 的 Native Build Tools 路径,提供可选 `-Pnative`,不改变默认 JVM 构建。
2. 以已有 Native 原型的 base 应用为验证样本;将反射、代理、资源和序列化问题收敛为各 Starter
@@ -51,13 +51,13 @@ Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;
完成标准:样本应用可由文档化命令构建并运行 Native,核心链路有自动化或可重复的集成验证。
-### 阶段 4:JVM 25 / Native OCI 镜像
+### 阶段 4:JVM 25 OCI 镜像(1.1.1)
1. 在现有 Jib 所有权扩展、非 root `1001`、`${REGISTRY_URL}`、认证、版本/latest 标签和
`/app/logs` 卷基础上扩展,不另建平行发布链路。
-2. JVM profile 默认使用可配置的 JDK/JRE 25 基础镜像;Native profile 使用无 JDK 的最小 Linux
+2. JVM profile 默认使用可配置的 JDK/JRE 25 基础镜像;Native profile 不在 1.1.1 范围内。
运行时镜像,并显式保留 CA 证书、时区和必要字体。
-3. 对两种镜像验证用户、入口命令、端口、health、配置和日志,并记录层复用率。
+3. 对 JVM 镜像验证用户、入口命令、端口、health、配置、日志和 JVM 内存边界,并记录层复用率。
完成标准:两种镜像均以非 root 启动,现有 Registry 和日志约定不被破坏。
@@ -66,7 +66,7 @@ Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;
1. 用候选 Framework 版本在本地升级至少一个受影响 base 应用;启动其配置中心与依赖服务,确认
实际订阅预期 Nacos Data ID,再测试受保护接口等关键链路。
2. 记录 1.0.0 与 1.1 的镜像大小、压缩推送大小、启动时间和空载内存,注明环境和测量命令。
-3. 完成升级指南、Native/Jib 使用指南、版本矩阵、变更日志、回滚与降级清单。
+3. 完成升级指南、Jib 使用指南、版本矩阵、变更日志、回滚与降级清单。
4. 经维护者确认后推送候选分支;CI 成功且再次确认后才创建 Release、Maven Central 发布和分支合并。
完成标准:Issue #64 全部验收项有链接到测试、命令、基准和文档的证据;发布动作仍须单独审批。
diff --git a/docs/migration-1.1.md b/docs/migration-1.1.md
index 18d1c2d..f1f9968 100644
--- a/docs/migration-1.1.md
+++ b/docs/migration-1.1.md
@@ -18,11 +18,11 @@ Spring Cloud 2025.1.2 已支持 Spring Boot 4.1。Spring Cloud Alibaba 的已发
## 应用升级步骤
-1. 将父 POM 或 BOM 更新至 Framework 1.1 候选版本,保留 `maven.compiler.release` 为 `21`。
+1. 将父 POM 或 BOM 更新至 Framework 1.1.1,保留 `maven.compiler.release` 为 `21`。
2. 在 JDK 21、JDK 25 分别执行应用的 `mvn test`;业务使用 Spring Cloud Alibaba 时,至少启动一次
使用真实 Nacos Config Data 的集成环境。
3. 验证配置实际订阅预期 Nacos Data ID、服务注册、数据库、缓存、RPC、鉴权和健康检查。
-4. 若应用使用反射、JDK 动态代理、资源扫描或动态序列化,在 Native 阶段将所需提示提交到对应
+4. 若应用使用反射、JDK 动态代理、资源扫描或动态序列化,在后续 Native 阶段将所需提示提交到对应
Framework Starter,而不是在每个应用复制 `reflect-config.json`。
## Nacos 公共配置
@@ -53,6 +53,9 @@ GitHub Actions 对 JDK 21 和 JDK 25 执行相同命令。发布前还必须完
## 已知限制
-- 此阶段不改变默认 JVM 打包路径;Native Image 和双模式 OCI 镜像将作为独立阶段交付。
+- 1.1.1 将默认 JVM 运行时切换为 `eclipse-temurin:25-jre-alpine`,并设置容器内存比例(初始 10%,最大 60%)、线程栈 `256k`、Metaspace 上限 `128m`、Direct Memory 上限 `128m` 及 OOM 退出策略。应用可通过 Jib 属性覆盖这些默认值;使用大量线程、动态代理或 Netty 的应用应在压测后调整。
+- Native Image 暂不纳入 1.1.1 发布范围,保留为后续专项工作;MyBatis-Plus、Nacos、Sentinel 的 Native 兼容性需要独立验证。
+- Sentinel 依赖在 `opensabre-starter-rpc` 中改为可选依赖,不再默认进入应用镜像;需要 Sentinel 的应用必须显式声明对应依赖,并在部署层启用 Sentinel 控制台。
+- AppCDS 试点结论:Spring Boot fat jar 直接生成的归档与 Jib exploded classpath 不一致,不能直接复用。后续应在 Jib 的 `/app/classes:/app/resources:/app/libs/*` 布局上按应用生成归档,并作为显式 profile 启用,暂不作为默认镜像内容。
- Spring Cloud Alibaba 的正式 Boot 4.1 认证尚待其上游发布,不能据此直接宣称所有 Alibaba 组件已
获完整生产认证。
diff --git a/docs/roadmap.md b/docs/roadmap.md
index 5831498..3105915 100644
--- a/docs/roadmap.md
+++ b/docs/roadmap.md
@@ -2,6 +2,7 @@
- 逐个 Starter 完成独立模块文档与可运行示例的双向链接。
- 建立 Spring Boot、Spring Cloud、Java 版本的兼容性矩阵。
-- [Framework 1.1 升级实施计划](framework-1.1-plan.md):Boot 4.1、JDK 21/25、Native Image 与双模式 OCI 镜像的阶段门禁。
+- [Framework 1.1 升级实施计划](framework-1.1-plan.md):Boot 4.1 与 JDK 21/25 的升级基线。
+- Framework 1.1.1:默认 Java 25 JVM 镜像、容器内存参数与镜像体积优化;Native Image 暂缓。
- 为自动配置、配置项、公共 API 建立弃用和迁移策略。
- 将审计、事件、缓存、持久化等跨模块能力形成端到端参考实现。
diff --git a/opensabre-base-dependencies/pom.xml b/opensabre-base-dependencies/pom.xml
index 9fe3b75..1ddef35 100644
--- a/opensabre-base-dependencies/pom.xml
+++ b/opensabre-base-dependencies/pom.xml
@@ -46,6 +46,12 @@
33.4.0-jre
3.0.5
3.5.2
+ eclipse-temurin:25-jre-alpine
+ 10
+ 60
+ 256k
+ 128m
+ 128m
5.11.4
5.4.1
@@ -331,7 +337,7 @@
- eclipse-temurin:21-jre-alpine
+ ${jib.base.image}
@@ -353,7 +359,15 @@
Asia/Shanghai
- -XX:+UseContainerSupport
+
+ -XX:+UseContainerSupport
+ -XX:InitialRAMPercentage=${jib.jvm.initial-ram-percentage}
+ -XX:MaxRAMPercentage=${jib.jvm.max-ram-percentage}
+ -Xss${jib.jvm.stack-size}
+ -XX:MaxMetaspaceSize=${jib.jvm.max-metaspace-size}
+ -XX:MaxDirectMemorySize=${jib.jvm.max-direct-memory-size}
+ -XX:+ExitOnOutOfMemoryError
+
USE_CURRENT_TIMESTAMP
diff --git a/opensabre-starter-rpc/pom.xml b/opensabre-starter-rpc/pom.xml
index 3204374..cccedca 100644
--- a/opensabre-starter-rpc/pom.xml
+++ b/opensabre-starter-rpc/pom.xml
@@ -61,16 +61,19 @@
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
+ true
com.alibaba.cloud
spring-cloud-alibaba-sentinel-datasource
+ true
com.alibaba.csp
sentinel-datasource-nacos
+ true
diff --git a/opensabre-starter-rpc/src/main/java/io/github/opensabre/rpc/sentinel/config/OpensabreSentinelConfig.java b/opensabre-starter-rpc/src/main/java/io/github/opensabre/rpc/sentinel/config/OpensabreSentinelConfig.java
index 1a312ee..8169063 100644
--- a/opensabre-starter-rpc/src/main/java/io/github/opensabre/rpc/sentinel/config/OpensabreSentinelConfig.java
+++ b/opensabre-starter-rpc/src/main/java/io/github/opensabre/rpc/sentinel/config/OpensabreSentinelConfig.java
@@ -3,9 +3,11 @@
import io.github.opensabre.rpc.sentinel.exception.SentinelExceptionHandlerAdvice;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Import;
@AutoConfiguration
+@ConditionalOnClass(name = "com.alibaba.csp.sentinel.slots.block.BlockException")
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@Import({SentinelExceptionHandlerAdvice.class})
public class OpensabreSentinelConfig {
diff --git a/pom.xml b/pom.xml
index 384eb6e..2d58e70 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,7 +68,7 @@
0.9.0
1.18.42
- 1.1.0
+ 1.1.1