看到了首页上的Fel0.9发布了,据说性能可以媲美JAVA,我和大家的疑问相同,主要是基于JAVA的软件性能如何超越,于是用官方的代码自己跑了下,就是http://code.google.com/p/fast-el/wiki/Performance网页中的PerformanceTest类,结果如下:
fel --------cost[2 ]---value[11181] ------exp[1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71] java el --------cost[461 ]---value[11181.0] fel --------cost[7403 ]---value[true] ------exp[i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ] java el --------cost[8819 ]---value[true] fel --------cost[1923 ]---value[295.86196287059323] ------exp[pi*d+b-(1000-d*b/pi)/(pi+99-i*d)-i*pi*d/b] java el --------cost[3789 ]---value[295.86196287059323] fel --------cost[1483 ]---value[ world] ------exp[s.substring(m.d )] java el --------cost[1777 ]---value[ world] fel --------cost[1316 ]---value[3] ------exp[s.substring(1).substring(2).indexOf('world')] java el --------cost[1800 ]---value[3]
看起来Fel确实比Java快速了.
但仔细研究测试代码,发现测试基于100 * 1000 * 1000次的循环上的,那么1次执行的速度如何呢,将times变量变为1,采用System.nanoTime()计时,结果如下:
fel --------cost[5474 ]---value[11181] ------exp[1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71] java el --------cost[7184 ]---value[11181.0] fel --------cost[116658 ]---value[true] ------exp[i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ] java el --------cost[22579 ]---value[true] fel --------cost[81763 ]---value[295.86196287059323] ------exp[pi*d+b-(1000-d*b/pi)/(pi+99-i*d)-i*pi*d/b] java el --------cost[24632 ]---value[295.86196287059323] fel --------cost[80053 ]---value[ world] ------exp[s.substring(m.d )] java el --------cost[14711 ]---value[ world] fel --------cost[69447 ]---value[3] ------exp[s.substring(1).substring(2).indexOf('world')] java el --------cost[20184 ]---value[3]
除了无变量的数学运算,其余的均完败于Java...
再用运行10次,20次的结果,发现结果同上的,但是随着运行次数增多,Fel就会赶上来.个人认为是由于Fel对编译后的表达式进行了缓存,多次执行情况下,节省了解析表达式的时间,但是实际应用中,表达式的公式都是固定的,只是根据参数不同返回不同结果,如果只是对解析的公式缓存而没有直接对结果缓存,Fel还是有很多应用场景的,但是对于不定表达式解析执行,应该不适用...
希望Fel的测试更加全面些,每次执行参数都是相同的,如果是不同的呢?这样能够免除对结果的缓存...
另外,单次执行的时候性能确实比Java慢很多,那么他的执行次数与Java相比的性能曲线是什么样的?
最后,开源软件的产品不是吹出来的,不能只靠标题,应该真实的说明具体适合应用的场景,不适合的情况..如果增加实际生产中对产品的性能提升案例,就更加完美了..
提了很多疑问,自己也要上班,不一一测试了,Antlr的词法语法解析还是不错的,据说4版本更强了.
相关推荐
fel计算引擎0.9官方版本,0.9的版本多了很多方法,支持了大数高精度,maven没有找到直接pom依赖,下载到本地再依赖本地jar包来进行操作
Fel是轻量级的高效的表达式计算引擎
Fel表达式计算引擎0.9版本
Fel轻量级的高效的表达式计算引擎。 Fel在源自于企业项目,设计目标是为了不断变化的功能需求和性能需求.文档中有个别错误,但不影响阅读
Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求。 Fel是开放的,引擎执行中的多个模块都可以扩展或替换。Fel的执行主要是通过函数实现,运算符(+、-等都是Fel函数),所有这些函数都是可以...
fel轻量高效的表达式计算引擎jar包
高速 Fel表达式引擎 。类似ognl 速度很快。 性能很高
我自己移植的windows下的sunxitools-fel,可以用于全志cpu的fel模式。cpu调试
若usb设备不能正常识别,可以用zadig软件给usb设备安装驱动。在烧录荔枝派flash时,往往需要进入fel模式,将fel-sdboot文件写入sd卡能够使荔枝派上电直接进入fel模式,从而使系统检测出usb fel设备。
Fel(Fast Expression Language)是开放的、高效的、轻量级的表达式语言。拥有解释执行和编译执行双引擎。Fel在编译执行时,做了很多优化,适合处理海量数据。...Fel基于Java1.5开发,适用于Java1.5及以上版本。
Fel表达式引擎
基于Java反射和Fel计算引擎动态导出Excel的实现.pdf
fel轻量高效的表达式计算引擎,下载后解压放入项目中即可使用
fel-0.8.jar...........................................................................
全志soc 使用usb进行nand flash 刷机的uart log
bpi-fel-mass-storage-gui4win v1.002.zip bpi-fel-mass-storage-gui4win v1.002.zip
杂牌h61fel3-a0主板BIOS FPTW备份 64位Windows 备份 fptw64.exe -d bios.bin -bios 刷入 fptw64.exe -f bios.bin -bios PS:备份BIOS提示ERROR104的解决方法 fpt -i 查看并记录存储芯片的ID;
本工具用于Windows将开发板的emmc识别为U盘,然后进行系统烧录
离散事件仿真的小案例。...AbleBaker.java是主程序,FEL.java是生成将来时间表辅助程序,RandomUtil.java是生成不同分布随机数的辅助程序。安装部署JDK后即可运行。本案例主要通过双向链表实现将来事件的添加和删除。