Eval.x引起的服务暂停


现象

请求耗时明显增加,full gc越来越频繁,且效果不佳

解决方案

业务代码中使用了动态表达式计算函数:Eval.x("x", "x!=null"),修改后代码如下:

// 表达式中不支持null,需要替换为nil
expression = "x!=null".replaceAll("([!=]=\\s*)null", '$1nil')

Map env = new HashMap()
env.put("x", "x")
// 设置为true,开启缓存
Expression compiledExp = AviatorEvaluator.compile(expression, true)
boolean flag = compiledExp.execute(env)

修改后GC耗时10ms内,接口响应200ms内