除了作者的weblog,好像没有人讲过其性能如何?从作者的blog上,可以发现ikvm比jdk的效率还要高些。 我随手写了一个简单的测试,可能需要声明这可能不正确。
通常,我关心对象的创建和属性的设置和取值,这往往是跨层调用的致命之处。无论是java/com,.net/com或是java/.net都是如此。 java/com,无人能比过visual j++(我的使用经历是visual j++创建的dual interface的com比vb创建的更快)。.net/com调用通常需要花费几倍的时间。通常,我一般认为可接受的在一倍以内,如果是1/3,我就会使用它。
ikvm 看来达到了我的要求 我创建了一个Category类,有三个私有字段id,name,level和其相应的setter,getter,下面是测试的java代码 public long speed(){ long start=System.currentTimeMillis(); for(int i=0;i<100000;i++){ Category c=new Category(); c.setId(i); c.setName(String.valueOf(i)); c.setLevel(i); c.getId(); c.getName(); c.getLevel(); } return System.currentTimeMillis()-start; }
这段代码在eclipse中运行通常小于120毫秒。 同样的代码可以放在C#中运行,其时间通常是156毫秒 当然,大家会发现在C#中 c.setName(String.valueOf(i));
可以优化为 c.setName(i.ToString()); 这样,这段代码在C#中运行时间会小于110秒,当然,这不能用来与java比较。但可以发现.net的值类型的概念带来的一些好处
同样,我也测试了在.net中直接调用java代码的speed过程,通常这比在.net中构造相同的代码快10毫秒左右。
看来上面的这段文字,我想大家可能会同我一样对ikvm开始发生兴趣了吧。以后,我想我会关注以下的内容 ①java编译器对ikvmc的影响(作者强调用jikes) ②一个列表,整理能被ikvmc能被顺利转换的java库。
其中,第二个工作是个体力活,如果有一些人来做,会比一个人做好许多
ikvm 站点 www.ikvm.net ikvm 作者的weblog http://weblog.ikvm.net
|