首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java .NET互操作性

Java .NET互操作性
EN

Stack Overflow用户
提问于 2013-06-29 17:09:46
回答 1查看 2.7K关注 0票数 8

我正在开发一个在并行Plesk Panel (视窗)上托管的.NET网站,我有一些用Java编写的类,使用它的swing和JavaMail API,我想在我的网站上使用这些API。我有两个选择-- jni4net和IKVM.net。我只想知道,从性能和开发工作量来看,哪种方法是高效和方便的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-25 19:56:15

jni4net比小得多(1.5Mb的二进制大小),并且有更好的内存占用 --但是开发可能已经停止,项目已经被放弃,因为上一次存储库更新是在2013年11月执行的,但它仍然处于Alpha阶段,因此它的不成熟,复杂,需要做更多的工作才能使用它,BTW,jni4net正在使用LGPL,所以如果你想在你的商业产品中使用它,这将是一个非常大的问题。

IKVM.net是用CLR编写的Java运行时的几乎全部实现(因为它实现了OpenJDK,而不是Orcale Java,所以它有点问题)平台本身会JIT将Java字节码编译成IL代码,然后执行它,这类似于QEMU,但还有另一个问题,我们遇到了三层,第一层是Java Runtime,然后是CLR,最后是原生代码<代码>E215,因此它的<代码>E116非常慢<代码>E217,另一个问题是初始时间问题。

例如,我编写了一个Java程序,它只打印著名的"Hello World“引号,然后退出,然后我想测试一下,IKVM.net和Orcale JVM(简称JVM)可以做多少毫秒(我在KVM windows环境中运行这两个平台,2核通用3.4 GHz CPU和2G DDR3内存),我的结果是,JVM在692ms内完成,内存使用量为9MB,而IKVM.net可以使用大约4923ms,19MB内存占用,打印一个很酷的"Hello World!”如果我将Java Class编译成预编译的IL(ikvmc),可以将时间减少到大约1907ms,并且内存使用量与相同。

相比之下,对于JVM和IKVM.net(JIT),JVM已经领先竞争对手7倍的时间和2倍的内存,而对于JVM和IKVM.net(预编译),JVM仍然领先竞争对手的2.7x倍和1.11x倍的内存,而对于IKVM.net(JIT)和IKVM.net(预编译),它将在时间和内存占用方面给你带来两倍的提升,尽管它们仍然比JVM更慢更胖。

还有另一个问题,预编译的IKVM.net存根必须携带整个IKVM.net二进制文件到任何地方的,这在包的大小上增加了大约41MB,然后,我不知道我是否可以剥离一些未使用的库,但在大多数情况下,我们不会这样做。

对于jni4net,打印"Hello World“所用的时间大约是1567ms,从CLR到JVM,那么从JVM到CLR又如何呢?这有点奇怪,它使用的是2106ms,我不知道为什么会有这么大的差异,也许是因为Java从头开始动态地创建了一个实例,而CLR可以直接在静态中P/调用JNI。

总之,jni4net更有可能是CLR和Java之间的代理--它没有实现一个完整的环境,也没有模拟一个完整的CLR,相反,它将根据现有资源创建和CLR实例。虽然是IKVM.net,但它更像是一个用编写的Java,但是你可以将.Net代码注入到.Net中,而你不能用Java端的编写.Net,它很慢,但是它不再需要JVM不再需要,你可以只安装.Net框架并享受剩下的(但你只能运行Java )。

对于您的问题,根本没有好的解决方案-- jni4net和IKVM.net,实际上是两个完全不同的东西,但是如果您想强行得出结论,我想使用IKVM.net --它仍然是活动的、强大的、可扩展的,但是胖和慢的

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17378573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档