繁体   English   中英

在同一过程中执行Java和C#?

[英]Executing Java and C# within the same process?

我想在同一过程中执行Java VM和C#应用程序,从而可以为相同的共享库共享相同的内存区域和相同的内存。

有人知道这样做的方法吗?

我将能够从C#或Java中的C#运行Java,甚至可以使用C应用程序在同一进程中同时启动两者。

[更新]

http://jni4net.com/项目声称提供了以下功能:“进程内-这意味着两个VM处于同一进程中。任何调用在两个环境中都使用相同的线程和相同的堆栈。这相对较快。”

我正是尝试自己这样做,以便使用一个简单的堆外内存地址并将其用于两个进程内VM。

C#是被编译为中间语言(IL)的.NET,Java可能具有用于.NET IL的处理器,但在构建时将其包含在Java项目中。

您将无法运行共享相同执行线程和内存的两个单独的进程。

最重要的是,我认为这不是一个好主意。

从我的个人经验来看,所有声称支持两者的当前可用项目在库甚至某些语言功能上都存在各种缺陷和支持问题,更不用说运行时性能了。 如果您不喜欢简单的套接字解​​决方案或内存映射的文件内容,并且将它们声明为非标准且存在陷阱,那么我只能告诉您您尝试使用的框架存在更多陷阱。

另外,共享内存的想法让我有些困惑。 您要共享什么确切的数据? 请记住,C#和Java内存结构不相互兼容,您要么存储一些第三方标准的东西,例如音频/视频/图片等; 或者您需要编写自己的序列化层,这实际上使您无法从两侧对同一对象进行操作。 如果您已经在编写自己的序列化层,那么什么使您无法使用似乎双方都支持最好的套接字解​​决方案呢?

如果有任何性能方面的问题,我可以说由于您使用的是Java + C#解决方案,因此与应用程序可以实现的任何性能相比,MMF,套接字或共享内存之间的性能差异都微不足道。 如果您的应用程序确实需要这样的性能,则最好使用C ++甚至是ANSIC。

因此,我完全同意所有评论,即您试图实现的目标似乎方向不正确。

解决方案是将Java和Mono嵌入同一进程中。 在C / C ++应用程序中有可用的资源,但不仅限于C / C ++。

通过在同一过程中将Java和Mono(C#)嵌入在一起,可以保证所有所需的属性。 共享内存中没有重复项,内存操作是即时的,并且更改以正确的顺序显示。

人们应该像往常一样小心地根据多个处理器设置中的内存域来固定线程,仅此而已。

甚至可以通过将C#和Java线程固定到同一处理器来共享同一处理器,并从第二级甚至第三级缓存中获利。

另一个重要的好处是,两个VM都受益于共享相同的本地共享库实例,从而导致在两个VM中运行的代码与完全相同的库实例进行交互,而不是使用两个不同的版本。

有用的信息:

有几种方法可以在.NET进程中托管JVM,也可以在Java进程中托管.NET CLR,但是它们很丑陋,并且需要熟悉JNI(Java本机接口)和/或CLR基于COM的托管API。

幸运的是,有一些互操作性工具可以封装这些机制,并允许Java和.NET在同一进程中运行并可以自由互操作。 一种这样的工具是来自JNBridge的JNBridgePro。 请访问www.jnbridge.com了解更多信息,尤其是寻找“共享内存”。

免责声明:我在JNBridge。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM