网站首页 > 教程文章 正文
问题描述:
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [org.bouncycastle.asn1.ASN1OutputStream->org.bouncycastle.asn1.DEROutputStream->org.bouncycastle.asn1.DLOutputStream->org.bouncycastle.asn1.ASN1OutputStream]
根本原因是 循环依赖
此错误常见于 Tomcat 7.0.3x+ 启动时,
尤其是启用 Servlet 3.0 特性后,
容器会扫描所有 JAR 包中的类注解(如 @WebServlet)。
当扫描到存在 循环继承依赖 的类时,
递归加载超出 JVM 线程栈容量(默认 -Xss=1MB),
导致栈溢出。
核心原因分析
1.循环继承依赖(代码逻辑缺陷)
- 现象:两个类(如 ASN1EncodableVector 和 DEREncodableVector)互相继承,形成无限递归的类加载循环。
- 根源:项目中引入了多个版本的 Bouncy Castle 或其他第三方库,导致同名类存在冲突继承关系。
2.线程栈空间不足(JVM 参数问题) 这个可能性很低
- 默认限制:JVM 线程栈大小通过 -Xss 参数控制,默认值通常为 1MB。当递归层级超过栈容量时触发错误。
- Tomcat 特殊性:Servlet 3.0 的注解扫描机制会深度遍历类层次结构,加剧栈消耗
解决方案 :消除循环依赖
排查冲突 JAR 包 org.bouncycastle 将冲突的jar 排除 即可解决
常见的代码优化(通用场景)
- 避免无限递归:确保递归函数有终止条件。
- 减少局部变量:优化方法内临时对象数量。
- 替换递归为迭代:例如用循环代替递归算法。
猜你喜欢
- 2025-05-27 还在为 Spring Boot3 整合 Easy Excel 发愁?一文搞定!
- 2025-05-27 7种方式,教你提升 SpringBoot 项目的吞吐量
- 2025-05-27 Tomcat处理HTTP请求流程解析
- 2025-05-27 SpringBoot中六种设计模式应用案例二
- 2025-05-27 Java Web应用调优线程池:没你想的那么复杂
- 2025-05-27 SpringMVC异常处理句柄这些细节你知道吗?
- 2025-05-27 惊呆了!Controller接口返回值支持17种逆天类型
- 2025-05-27 【干货】EasyExcel确实好用,Springboot+EasyExcel实操
- 2025-05-27 Spring Boot 应用如何防护 XSS 攻击
- 2025-05-27 java验证码生成
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)