簡體   English   中英

從動態庫調用jni時,JVM堆的內存不足

[英]Not enough memory for JVM heap when calling jni from dynamic library

我有一個奇怪的情況:我們有.dll庫(我們稱其為“ sdk_wrapper”),該庫是Java類的包裝器,這些類正在打開JRE jvm.dll並使用其他一些.dll(PKCS11實現,具體而言,但我認為沒關系)。

當我直接在我的C ++程序中使用sdk_wrapper時,一切工作正常(別名為“ run_dll”)。 但是,當我將其打包到另一個.dll(以准備配置文件,初始化庫等)並導出與程序“ run_dll”相同的一個函數時,調用此函數將導致jvm初始化錯誤: Could not reserve enough space for object heap JVM.dll初始化使用-Xmx512m

你知道發生了什么嗎? 我讀到JVM需要連續的一部分內存來初始化,但是直接從程序和另一個dll調用'sdk_wrapper'有什么區別? 它們在同一位置(我的意思是在同一目錄中)。

當您將庫加載到內存中時,您將以地址空間的內存碎片結束。 Win32對此特別糟糕。

注意:如果您使用64位進程,這不是問題,因為您將擁有大量的虛擬內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM