锁定老帖子 主题:FEL(表达式语言)——7月30号更新
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-18
ppgunjack 写道 是debug版本的问题,换了release和优化op3,
执行大概6秒,加上->second把数据取出也差不多的时间 这台机器java取数大概花费14秒,这样时间算合理 同样的实现如果是指针实现变量读取,c++在1亿次下的累计要再估计 以前没比较过,没意识到debug和release速度会导致数量级的差别 额。说到debug 和 release 。。这事我知道,,不过没想到这茬。。 |
|
返回顶楼 | |
发表时间:2011-03-25
引用 "40.52334+60*(21.8144+17*32.663)"一亿次只需要不到一秒的时间。
突然想到,因为是动态编译,估计这种固定的表达式当执行很多次以后会jit优化成常数直接返回吧。导致性能会很高的假象 |
|
返回顶楼 | |
发表时间:2011-03-25
应该不是吧,如果是常数,那1秒感觉时间多了,除非是耗在返回数值对象上
|
|
返回顶楼 | |
发表时间:2011-03-25
jit是在执行足够多次数以后 虚拟机认为有必要优化才jit不是吗?那1秒多是因为之前执行的缘故吧。
具体可以试一下第一次执行后直接再执行一亿次看时间 |
|
返回顶楼 | |
发表时间:2011-03-26
最后修改:2011-03-26
EL的项目非常多了,我过去做的轮子
|
|
返回顶楼 | |
发表时间:2011-03-31
ppgunjack 写道 以前做过,用java解决不了对变量的值高速访问的问题,用c或者c++的指针很容易能提高这块的效率,用java最低限度也需要使用1次hash
有些好奇,即便给你指针,你就可以不hash? 之所以用asm进一步编译成bytecode就是因为把优先这个大坑推给了jvm去做。 其实更疯狂的选择是直接生成asm code,再用natvie method做中转。 |
|
返回顶楼 | |
发表时间:2011-04-01
AlwenS 写道 ppgunjack 写道 以前做过,用java解决不了对变量的值高速访问的问题,用c或者c++的指针很容易能提高这块的效率,用java最低限度也需要使用1次hash
有些好奇,即便给你指针,你就可以不hash? 之所以用asm进一步编译成bytecode就是因为把优先这个大坑推给了jvm去做。 其实更疯狂的选择是直接生成asm code,再用natvie method做中转。 编译器实现变量不用hash吧,直接对代码进行地址替代 这个级别的运算本身已经很低级,逻辑不换我想用asm不会有显著提高 Java真要在榨点性能可以采取前面兄弟的方式用更简化的映射替代Hash,甚至约束变量名内容来规避hash equal的成本,hash在这里有点重量级了 native的原理不太清楚,不过感觉这种循环内频繁调用成本可能比hash还高一些 |
|
返回顶楼 | |
发表时间:2011-07-30
我是楼主,自己顶帖子。
Fast-el发布新版本 新版本做了一些简化,加入编译成java源码功能。效率大大提高,生成java源码的逻辑挺简单,方便修改和扩展。 支持新的表达式,如下所示: 1:"abc".substring(1)及所有的String类方法 2:对象.方法、对象.属性 代码刚刚写好,晚些时候加上文档。 |
|
返回顶楼 | |
发表时间:2011-07-30
lotusyu 写道 ppgunjack 写道 表达式:kpi1/(kpi2*(kpi4+kpi5*kpi3)-kpi6)/kpi7 计算次数:100000000,花费时间:16992.0毫秒 16992 平均计算花费时间:1.6992E-4毫秒 9.832817520114257E-6 表达式:40.52334+60*(21.8144+17*32.663) 计算次数:100000000,花费时间:5477 34665.647339999996 cpu为intel8400,无其他负载 数字表达式如果单测大概2100左右,但放变量表达式后面一起跑就慢了一倍多,找不到原因 数组挂靠应该比数字表达式慢,但应该是一个数量级 以前做查询过滤器一次数据不会过20w,计算kpi每秒不会过w,对server速度足够了 写这个代码的时候cpu应该是amd3000+,测起来应该比较寒碜了,一直想换c++然后去函数化看看最快能到多少 如果你只是简单的算术运算的话,可以使用superobin兄的将表达式编译成字节码的方法,在我的老笔记机上执行表达式 "40.52334+60*(21.8144+17*32.663)"一亿次只需要不到一秒的时间。 放变量表达式后面一起跑就慢了一倍多,找不到原因,可以使用性能分析工具找找原因。 使用新版本fast-el,使用编译的方式执行"40.52334+60*(21.8144+17*32.663)"表达式1亿次,不到1秒钟,本本的配置为I3-2310M,4G内存 |
|
返回顶楼 | |