Skip to content

表达式中if语句过多会导致StackOverflowError #682

@chenming666666

Description

@chenming666666

运行环境:jdk17, G1,堆:4G,栈:256k

异常报错信息:
java.util.concurrent.ExecutionException: java.lang.StackOverflowError
at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
at com.brcloud.hx.custvar.service.CustVarService.multiVersionMealResultProcess(CustVarService.java:117)
at com.brcloud.hx.custvar.service.CustVarService.processorData(CustVarService.java:82)
at com.brcloud.hx.custvar.service.CustVarService.processData(CustVarService.java:71)
at com.brcloud.hx.custvar.controller.CustVarController.query(CustVarController.java:79)
at com.brcloud.hx.custvar.controller.CustVarController$$FastClassBySpringCGLIB$$4d57b00.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:792)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
at com.br.cloud.web.MethodTimer.timeMethod(MethodTimer.java:68)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:707)
at com.brcloud.hx.custvar.controller.CustVarController$$EnhancerBySpringCGLIB$$79b817d6.query()
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:765)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.StackOverflowError: null
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.System$2.defineClass(System.java:2307)
at java.base/jdk.internal.reflect.ClassDefiner.defineClass(ClassDefiner.java:66)
at java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:401)
at java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:395)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.base/jdk.internal.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:394)
at java.base/jdk.internal.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:75)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:63)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at com.googlecode.aviator.utils.Reflector.invokeMatchingMethod(Reflector.java:129)
at com.googlecode.aviator.utils.Reflector.invokeStaticMethod(Reflector.java:544)
at com.googlecode.aviator.runtime.function.ClassMethodFunction.variadicCall(ClassMethodFunction.java:94)
at com.googlecode.aviator.runtime.function.AbstractVariadicFunction.call(AbstractVariadicFunction.java:64)
at com.googlecode.aviator.runtime.RuntimeFunctionDelegator.call(RuntimeFunctionDelegator.java:63)
at Script_1756129642087_3347.execute0(Script_1756129642087_3347:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642085_3345.execute0(Script_1756129642085_3345:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642083_3343.execute0(Script_1756129642083_3343:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642081_3341.execute0(Script_1756129642081_3341:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642079_3339.execute0(Script_1756129642079_3339:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642077_3337.execute0(Script_1756129642077_3337:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642075_3335.execute0(Script_1756129642075_3335:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642073_3333.execute0(Script_1756129642073_3333:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642071_3331.execute0(Script_1756129642071_3331:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642069_3329.execute0(Script_1756129642069_3329:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642067_3327.execute0(Script_1756129642067_3327:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642066_3325.execute0(Script_1756129642066_3325:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642064_3323.execute0(Script_1756129642064_3323:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642062_3321.execute0(Script_1756129642062_3321:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642060_3319.execute0(Script_1756129642060_3319:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642058_3317.execute0(Script_1756129642058_3317:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642056_3315.execute0(Script_1756129642056_3315:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642054_3313.execute0(Script_1756129642054_3313:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642052_3311.execute0(Script_1756129642052_3311:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642051_3309.execute0(Script_1756129642051_3309:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642049_3307.execute0(Script_1756129642049_3307:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642047_3305.execute0(Script_1756129642047_3305:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642045_3303.execute0(Script_1756129642045_3303:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642043_3301.execute0(Script_1756129642043_3301:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)
at com.googlecode.aviator.runtime.function.internal.IfCallccFunction.call(IfCallccFunction.java:44)
at Script_1756129642041_3299.execute0(Script_1756129642041_3299:1)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:44)
at com.googlecode.aviator.runtime.function.LambdaFunction.call(LambdaFunction.java:115)

问题说明:
我们的系统是通过配置中心服务对于所有的表达式做异步加载并缓存后,请求使用表达式进行实时计算,表达式初次加载缓存时没报StackOverflowError,实际计算时出现栈溢出问题,经测试,表达式中构造比较多的if语句,表达式加载时也会报StackOverflowError。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions