一、OGNL & MVEL
关于OGNL的使用参见: http://www.ibm.com/developerworks/cn/opensource/os-cn-ognl/
关于MVEL的使用参见:http://mvel.codehaus.org/Getting+Started+for+2.0
二、性能
关于OGNL&MVEL两者的性能一开始看到 http://mvel.codehaus.org/Performance+of+MVEL+2.0 等等一系列的 测试报告的时候几乎都要相信的放弃OGNL了
并且在第一篇文章中也有OGNL和java原始调用的对比,实际测试也发现大有不同。
然后实际测试结果发现最使用新版本,都做最优化的时候两者均相差不大。当然在都不做预编译的时候MVEL 确实好于OGNL
直接上代码:
//direct invoke long time01 = new Date().getTime(); String dirResult=""; for (int i = 0; i < 100000; i++) { dirResult= person.getDog().getName(); } long time02 = new Date().getTime(); System.out.println("direct invoke :"+(time02 - time01)); //MVEL invoke long time1 = new Date().getTime(); for (int i = 0; i < 100000; i++) { MVEL.eval("p.dog.name", varMap); } long time2 = new Date().getTime(); System.out.println("mvel invoke:"+(time2 - time1)); //MVEL compiled invoke OptimizerFactory.setDefaultOptimizer("ASM"); ExecutableAccessor compiled2 = (ExecutableAccessor) MVEL.compileExpression("p.dog.name"); long time3 = new Date().getTime(); for (int i = 0; i < 100000; i++) { String name = (String) MVEL.executeExpression(compiled2, varMap); } long time4 = new Date().getTime(); System.out.println("mv compiled invoke:" + (time4 - time3)); //OGNL invoke long time6 = new Date().getTime(); for (int i = 0; i < 100000; i++) { Ognl.getValue("#person.dog.name", context, context.getRoot()); } long time7 = new Date().getTime(); System.out.println("ognl invoke:" + (time7 - time6)); //OGNL compile invoke OgnlContext context2 = new OgnlContext();// 实现了map接口 context.setRoot(person); Node node = Ognl.compileExpression(context2, context2.getRoot(), "dog.name"); context2.putAll(context); long time8 = new Date().getTime(); for (int i = 0; i < 100000; i++) { node.getAccessor().get(context, context.getRoot()); } long time9 = new Date().getTime(); System.out.println("ognl compile invoke:" + (time9 - time8)); //OGNL compile invoke long time18 = new Date().getTime(); for (int i = 0; i < 100000; i++) { Ognl.getValue(node, context, context.getRoot()); } long time19 = new Date().getTime(); System.out.println("ognl compile invoke 2:" + (time19 - time18)); //OGNL parse invoke Object expre = Ognl.parseExpression("#person.dog.name"); long time10 = new Date().getTime(); for (int i = 0; i < 100000; i++) { Ognl.getValue(expre, context, context.getRoot()); node.getAccessor().get(context, context.getRoot()); } long time11 = new Date().getTime(); System.out.println("ognl parse invoke:" + (time11 - time10));
结果如下:
direct invoke :5 mvel invoke:672 mv compiled invoke:74 ognl invoke:2402 ognl compile invoke:88 ognl compile invoke 2:88 ognl parse invoke:178
版本信息:
OGNL:3.0.1
MVEL:2.2.0
JDK:1.7.0_55
三、结论:
1、都进行预编译的时候 OGNL& MVEL 性能相差不大。
2、默认直接使用 MVEL 优于 OGNL。
3、相比java执行调用还是20倍左右的差距。
相关推荐
java实战
本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...
camel-ognl-1.6.4.jar, camel-ognl-2.8.1.jar, com.springsource.org.ognl-2.6.9.jar, com.springsource.org.ognl-sources-2.6.9.jar, ognl-2.5.1.jar, ognl-2.6.11.jar, ognl-2.6.3.jar, ognl-2.6.5.jar, ognl-...
基于WebWork核心的MVC开发与实践(ognl这一章)
telb.zip,使用ognl或mvel表达式作为组件/页参数值。tapestry5表达式语言绑定-使用ognl或mvel表达式作为组件/页参数值
OGNL百度百科OGNL百度百科OGNL百度百科OGNL百度百科OGNL百度百科OGNL百度百科
ognl表达式 ognl表达式 ognl表达式 ognl表达式
与Java语言不同的操作符 赋值与取值 5. 对象到数据类型的强制转换 将对象解释为布尔值 将对象解释为数值 将对象解释为整数 将对象解释为集合 附录A. OGNL语言参考 操作符 表格一览 3.1. OGNL 表达式元素 ...
标签:ognl、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
使用的ognl,正对是struts2 hibernate 等
开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12...
java的Struts中的OGNL标签的使用,详细介绍,比较实用。
struts2 OGNL之标签访问值栈(value stack)用法,希望能对大家有帮助
赠送jar包:ognl-3.1.12.jar; 赠送原API文档:ognl-3.1.12-javadoc.jar; 赠送源代码:ognl-3.1.12-sources.jar; 赠送Maven依赖信息文件:ognl-3.1.12.pom; 包含翻译后的API文档:ognl-3.1.12-javadoc-API文档-...
ognl-3.0.4.jar ognl-3.0.4.jar
标签:ognl、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语...
ognl源码 ognl源码 ognl源码 ognl源码 ognl源码
ognl.jar ognl.jar
ognl语言的使用。让我们通过使用ognl了解ognl标签使用的便利性。