Java SpEL和xFF1A;使用SpEL编译时,表达式求值的性能没有明显的不同

Java SpEL和xFF1A;使用SpEL编译时,表达式求值的性能没有明显的不同,java,spring,expression,Java,Spring,Expression,我阅读了文档,了解到SpEL编译可以提高性能。但是我编写了一个简单的测试用例,性能没有明显提高为什么? 类定义: 公共类个人容器{ public List personList=new ArrayList(); } 班主任{ 公共广播; } 班级地址{ 公共双重编码; } 测试用例: SpelParserConfiguration config=新的SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, 这个.getClass().getClas

我阅读了文档,了解到SpEL编译可以提高性能。但是我编写了一个简单的测试用例,性能没有明显提高为什么?

类定义:

公共类个人容器{
public List personList=new ArrayList();
}
班主任{
公共广播;
}
班级地址{
公共双重编码;
}
测试用例:

SpelParserConfiguration config=新的SpelParserConfiguration(SpelCompilerMode.IMMEDIATE,
这个.getClass().getClassLoader());
ExpressionParser=新的SpelExpressionParser(配置);
Expression=parser.parseExpression(“personList[0].address.code<0.2”);
PersonContainer simple=新PersonContainer();
地址1=新地址();
地址1.code=0.1;
Person=新人();
person.address=address1;
simple.personList.add(person);
long begin=System.nanoTime();
对于(int i=0;i<50000;i++){
表达式.getValue(简单,布尔.class);
}
long end=System.nanoTime();
System.out.println(结束-开始);
输出使用不同的SpelCompilerMode:

OFF:      256158300
IMMEDIATE: 262268500
MIXED:     276793400

确保所有的类都是公共的。SpEL决定无法编译表达式的原因有很多。在表达式中使用而不是公共的类就是其中之一。您可以启用调试日志来查看表达式是否正在编译,并跟踪spring编译代码以查看原因

将Person和Address类更改为public后,您可以在运行时中看到差异

OFF         :       505040500 ns
IMMEDIATE   :        13948300 ns
MIXED       :        24264200 ns

在探查器下运行代码,看看时间在哪里。