本文介绍: 最近利用github action向Maven中央仓库发布编译的环境是应该是递归引用导致OOM了,但是仔细REVIEW了代码并没有发现问题。困扰了一个多月。根本的原因在于上面的静态变量。在中,被标记的静态属性初始化时如果在字符串拼接中使用了lambda流操作,可能导致javac递归,最终堆栈溢出。该问题在得到了修复Bug报告:https://bugs.openjdk.org/browse/JDK-8077605。
最近利用github action向Maven中央仓库发布企业微信SDK时会失败,从日志中发现是系统资源耗尽了,日志如下:
应该是递归引用导致OOM了,但是仔细REVIEW了代码并没有发现问题。困扰了一个多月。今天终于解决了,问题是由下面的代码引起的:
根本的原因在于上面的静态变量WECOM_USER_AGENT
。
在Java 8 中,被标记final的静态属性初始化时如果在字符串拼接中使用了lambda流操作,可能导致javac递归,最终堆栈溢出。该问题在Java 9得到了修复
Bug报告:https://bugs.openjdk.org/browse/JDK-8077605
解决方法
升级JDK
升级JDK到9+ 就可以直接解决这个问题。
兼容写法
如果无法直接升级JDK,可以使用静态块来初始化:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。