Ok當我編寫了C#驅動程序(驅動程序如虛擬程序來調用存根而不是設備驅動程序)程序調用C封裝器DLL和C封裝器DLL調用通過JNI實現大部分工作的java jar文件。所有3個程序都是32位。這樣做是爲了與另一個應該執行C#的供應商以及調用我們的C DLL的C程序集成。OutOfMemoryError/Program C++ to C to Java
我的示例測試C#到C到Java程序工作正常,但問題是,當供應商的實際C#程序調用我們的程序時,熱點JVM無法初始化完全或如果它正確初始化,在調用我們函數,它會拋出OutOfMemory錯誤。當我嘗試使用不需要連續堆空間的JRockit JVM時,JVM會導致程序崩潰。
開發平臺是Windows 7 64位操作系統。 Core i7,8GB RAM 實際程序必須是32位才能向後兼容舊硬件/ OS。
從我的理解來看,一個32位的進程通常有高達2GB的可用地址空間。從我的驅動程序佔用的任務管理器獲取的最大總大小爲256MB。供應商的C#程序加載了很多其他庫,但我非常懷疑它們會佔用700MB以上的空間。
這裏有什麼問題?地址空間是不是連續的?但是如果是這樣的話,爲什麼JRockit會崩潰,因爲它可以處理非連續的地址空間?
這聽起來像一個瘋狂的設計;)這不是一個軍事項目,是嗎?)? – paulsm4
使用熱點JVM時 - 您得到的初始化錯誤是什麼? – Deco
256-700 MB內存的驅動程序? [WAT](http://www.moneyandshit.com/wp-content/uploads/2011/04/wat.jpg)。你碰巧爲微軟工作嗎? – Kevin