java调用dll的运行原理
2013-10-20 17:02
183 查看
以前都是用c++和opencv处理图像,这次要求用java,刚上手很不适应。c++的程序中到处都是指针*还有**,但在java中可没有*更没有**,当然opencv在java和c++中编程上并不会差很多。另外还有一个就是效率了(本人用的是win7,在其他操作系统上就不知道了),首先是程序的运行效率,java肯定是比不上c++的,因为java程序的运行还需要jvm。而java提供jni也就是为了和其他语言兼容,从而提高运行效率,至于为什么说可以提高运行效率,下面会说到。其次就是编写程序的效率,正如上篇写到的编写dll,非常麻烦。
我没看到单纯的用java编写的很复杂的处理图像的程序,不知道是不是因为opencv本来就是用c和一些c++编写的,还是上面说的效率问题。而对于比较复杂的程序几乎都是调用dll。c++的dll(dynamic link library在win中这么叫)是机器码,和exe一样,只是exe是一个完整的程序,是一个主体。而dll可以说是一个可运行的分支,只有在exe需要他时才调用dll,这时他才被装载进内存并运行。(应该也可以好几个同时运行吧?就像多线程)。所以说dll本身就是一个可运行的程序!这样的话java调用dll也就是java程序通过jni接口启动了另一个c++程序,而这个dll的运行跟jvm的运行可以说没什么关系了,jvm是运行在操作系统层面,dll也是运行在操作系统层面(当然除了dll和java程序的一些参数交换,,,,)。而jni的的确确也就是一个接口,java通过这个接口告诉操作系统找到这个dll,并运行这个dll。说到底,java调用dll处理图像还是用c++处理图像,因为大量的算法都是封装在dll中的,真正的java程序也就是程序启动,初始化一些参数而已。而上面说到c++的效率是要比java的运行效率高的。从而提高了java的运行效率。
所以,java调用dll并没有像想象中那样和c++有着非常紧密的结合,也没有想象中的那样复杂。除了那个接口结合了c++和java。其他地方c++和java还是你走你的阳光道,我走我的独木桥,各自运行各自的程序!
我没看到单纯的用java编写的很复杂的处理图像的程序,不知道是不是因为opencv本来就是用c和一些c++编写的,还是上面说的效率问题。而对于比较复杂的程序几乎都是调用dll。c++的dll(dynamic link library在win中这么叫)是机器码,和exe一样,只是exe是一个完整的程序,是一个主体。而dll可以说是一个可运行的分支,只有在exe需要他时才调用dll,这时他才被装载进内存并运行。(应该也可以好几个同时运行吧?就像多线程)。所以说dll本身就是一个可运行的程序!这样的话java调用dll也就是java程序通过jni接口启动了另一个c++程序,而这个dll的运行跟jvm的运行可以说没什么关系了,jvm是运行在操作系统层面,dll也是运行在操作系统层面(当然除了dll和java程序的一些参数交换,,,,)。而jni的的确确也就是一个接口,java通过这个接口告诉操作系统找到这个dll,并运行这个dll。说到底,java调用dll处理图像还是用c++处理图像,因为大量的算法都是封装在dll中的,真正的java程序也就是程序启动,初始化一些参数而已。而上面说到c++的效率是要比java的运行效率高的。从而提高了java的运行效率。
所以,java调用dll并没有像想象中那样和c++有着非常紧密的结合,也没有想象中的那样复杂。除了那个接口结合了c++和java。其他地方c++和java还是你走你的阳光道,我走我的独木桥,各自运行各自的程序!
相关文章推荐
- JAVA中申请了两个对象,分别在调用方法和声明方法中把其中一个对象直接赋值给另外一个对象,运行结果,求原理。
- java 解决调用c语言实现简单HelloWorld函数生成.dll动态链接库的32位dll文件无法在64位机上运行
- Atitit.java jna 调用c c++ dll的原理与实践 总结 v2 q27
- Atitit.java jna 调用c c++ dll的原理与实践 总结 v2 q27
- 如何使用java调用DLL运行C++(初篇)
- Atitit.java jna 调用c c++ dll的原理与实践 总结 v2 q27
- JAVA和JVM运行原理揭秘
- 运行时获取方法调用堆栈信息(java)
- 代码解释:java反射调用的原理
- Java的运行原理
- Java 调用dll
- Java程序的运行原理及JVM的启动是多线程的吗?
- Java调用 dll 文件里的方法
- [原]VB6的Active DLL调用时,报“运行时错误”(429、430)的错误
- java调用VC编译而成的dll文件
- eclipse运行java代码的原理
- 菜鸟学习React Native for Android 之通讯原理分析(JAVA调用JS)
- Java webservice 调用自定义dll(有其他依赖)方法全解,无需设置环境变量
- Tomcat调用dll运行路径
- java调用C#的dll