当前位置: 技术问答>java相关
JNI 中内存管理的问题
来源: 互联网 发布时间:2015-04-23
本文导语: 在JAVA中,我所知道的是,不能对内存直接操作,是由虚拟机来管理的。 但现在我有一件苦差事,让我用JNI做一些东西,我感到用JNI是没办法的办法了 现在所作的工作是,用java组织起一个c程序,想起来应该...
在JAVA中,我所知道的是,不能对内存直接操作,是由虚拟机来管理的。
但现在我有一件苦差事,让我用JNI做一些东西,我感到用JNI是没办法的办法了
现在所作的工作是,用java组织起一个c程序,想起来应该不难,不就是相当于用java写个main函数嘛!
但现在的问题是,要调用的方法全部是c函数,而那些c函数到处都是指针,这样直接操作内存,java允许吗?(我想应该可以吧,毕竟是调用JNI嘛,不过这也是我不敢肯定的地方)
在c中操作内存是很灵活的,但java中好像是不允许的。那我这样写出来的程序能运行吗?那c函数中的内存操作是否受到java虚拟机的管理呢?
晕啊~~~,哪位高手帮帮忙,谢谢!
但现在我有一件苦差事,让我用JNI做一些东西,我感到用JNI是没办法的办法了
现在所作的工作是,用java组织起一个c程序,想起来应该不难,不就是相当于用java写个main函数嘛!
但现在的问题是,要调用的方法全部是c函数,而那些c函数到处都是指针,这样直接操作内存,java允许吗?(我想应该可以吧,毕竟是调用JNI嘛,不过这也是我不敢肯定的地方)
在c中操作内存是很灵活的,但java中好像是不允许的。那我这样写出来的程序能运行吗?那c函数中的内存操作是否受到java虚拟机的管理呢?
晕啊~~~,哪位高手帮帮忙,谢谢!
|
JNI里面使用指针应该没有什么问题,我一般的操作都没有问题。
但是你还是在JVM的环境中,好像对内存的申请有一定限制,我写的一个dll中
就出现了初始化一个_variant_t的时候
_variant_t t = _variant_t(str);//str长度有200k左右
出现了
#
# An EXCEPTION_STACK_OVERFLOW exception has been detected in native code outside the VM.
# Program counter=0x8f84c37
#
但是你还是在JVM的环境中,好像对内存的申请有一定限制,我写的一个dll中
就出现了初始化一个_variant_t的时候
_variant_t t = _variant_t(str);//str长度有200k左右
出现了
#
# An EXCEPTION_STACK_OVERFLOW exception has been detected in native code outside the VM.
# Program counter=0x8f84c37
#
|
必需转换出来,比如lxk 结构有15个成员,但现在我只需要其中的3个传给java,那你必需从lxk 结构中取出这个3个成员值,转换成字节数组,然后一次性传给java。
如果有太多类似的东西你可以作个c(c++)2java通信协议。
如果有太多类似的东西你可以作个c(c++)2java通信协议。