原文 http://www.3geye.net/?3/viewspace-3187
昨天,因为工作需要想了解下脚步引擎的实现原理,下载了一个开源的脚本引擎,研究了下,
如果大家需要下载的,请到我空间Google下,就可以发现这个脚本引擎的具体地址。
下面我来说下这个脚本引擎的一些性能问题。
首先来看看他是怎么读取脚本文件的。
代码
?InputStream is = new Object().getClass().getResourceAsStream(path);?? //j2me使用
?ByteArrayOutputStream baos = new ByteArrayOutputStream();
?int ch = 0;
??? while ( (ch = is.read()) != -1) {
????? baos.write(ch);
}
上面是作者读取脚本文件代码,本人觉得这个代码的效率很低,一个个字符读取出来,速度很慢,我测试了下发现读取一个很简单的文件需要47毫秒,在Dell 1420的机器上。这样的效率是很可怕的。
下面看看我是怎么提高他的性能的。
byte[] buff = new byte[512];
??? ??? ??? long total = 0;
??? ??? ??? int count = 0;
??? ??? ??? while ((count = is.read(buff)) > 0) {
??? ??? ??? ??? baos.write(buff, 0, count);
??? ??? ??? ??? total += count;
??? ??? ??? }
我是采用了一个512字节的缓冲区去读取这些数据,经过测试发现Dell 1420机器上的花费是0毫秒。
快了非常多。
不过脚本引擎除了读取源文件外,最重要的核心是解释引擎的速度。
有时间继续研究下。