簡體   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