添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
虚心的炒面  ·  Javascript ...·  2 小时前    · 
闯红灯的大象  ·  js ...·  2 小时前    · 
刀枪不入的红薯  ·  Spring Cloud Gateway ...·  11 小时前    · 
直爽的电脑桌  ·  MATLAB ...·  5 天前    · 
有胆有识的小蝌蚪  ·  Getting KeyError: ...·  1 月前    · 
千年单身的充电器  ·  Canvas ...·  2 月前    · 
学习
实践
活动
专区
工具
TVP
写文章

正则表达式堆栈溢出问题

背景

工作中,即席查询,涉及到对sql语句进行切割。解析sql中的注释信息。使用正则表达式匹配分组,进行处理。

问题

早上,数仓人员提供一个很长的sql(sql很长,此处省略)。

发现,执行后怎么也不出来结果。看了系统日志,也没发现报错信息,很奇怪。

分析

本地重现

线上环境无Exception日志输出。于是,进行本地调试,现象重现了。

代码

发现出现如下错误:

看到这里,就是堆栈溢出。看了报错的代码,是正则表达式解析问题。

然后,搜一下关键字“正则表达式 java.lang.StackOverflowError”。

搜出很多匹配的答案,其中有一篇描述的很透彻。

问题解决

调整线程栈

-Xss

每个线程的Stack大小

Stack的大小限制着线程的数量.如果Stack过大就好导致内存溢漏.-Xss参数决定Stack大小,例如-Xss1024K.如果Stack太小,也会导致Stack溢漏。

本地验证

使用idea 验证,修改main 的run jvm参数。

配置-Xss256k,-Xss512k,-Xss1m。然后,运行无上述问题。

总结

java 正则表达式会出现递归调用( 递归方法也要注意 )。这就会出现栈溢出的风险。所以,在使用正则表达式的同时,注意堆栈溢出问题。 不可用 Exception 捕获,因为 Error 直接继承自 Throwable 而非 Exception,所以即使你要捕获也应当捕获 Error。

动动小手指,关注一下,是给予我最大的动力。

  • 发表于:
  • 原文链接 http://kuaibao.qq.com/s/20171226G00WYV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据 《腾讯内容开放平台服务协议》 转载发布内容。
  • 如有侵权,请联系 [email protected] 删除。

关注

腾讯云 开发者 公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券