不得不说的话,关于表达式处理方案一些不得不说的话

一个同事写了一个 xxxx  EL,号称世界上最快的表达式处理模块。作为同事,我当然地要鼓励和支持这种精神。但是一些话却不得不说出来,
当面说,怕有泼冷水之嫌,写在这里算是一种记事吧。
他的实现思路:
预处理->将表达式转成java语言->调用javac编译成class->生成该表达式对应用的实例->执行实例方法。
动态编译技术发展到今天,怎么可能被最原始的javac抢了性能的头筹?这让cglib处身何处?更让asm情何以堪?
举一个简单的例子:
      1.你在一个文本文件中写入 “0,1,2,3,4,5,6,7,8,9”,然后读取这些字符并转换成int,然后把它们放入一个int数组中.
      2.直接int[] x = new int[0];然后一个for循环给数组赋值。
这两个方法谁快?你不会说第1种吧?
那你说用asm方法直接在内存右构造class快还是用javac编译快?
更别说classloader加载从内存中加载和从文件加载的性能。
另外,无论何种方式,你只能控制class被load,但你控制不了class的unload, 你无法强求用户的jvm启动时分配N giga的
Permanent Generation让你存放不断产生的class垃圾(那些实例你可以用自己的方式cache).你也无法强求用户启动jvm时
加入gc必须扫描Permanent Generation的选顶。
Tags: 

延伸阅读

最新评论

发表评论