Java 调 用C的dll,性能反而比直接用Java实现更慢是怎么回事?

王桑的一天 2022-07-22 08:41:56

Java 调用一个C的dll,接口函数功能主要是计算,没有IO,但是执行速度却比直接用JAVA实现还要慢很多倍,并没有提速。这是同事遇到的情况。

请问用JAVA调C库就是这样会变慢?无法通过调用C库提速?还是使用方法有问题?

而且,当JAVA调用C函数,线程数变多时,会偶尔崩溃,比较少时不会。同事说是JVM问题,难以定位,不赞同使用JAVA调用 C 库。

我想知道,JAVA是否有一些三方库,底层是用C实现的,以性能著称的?像Python一样,如numpy底层是C实现,性能更好

如果有,那应该不存在问题呀

补充:,

这个C库,给其他使用C++的同事使用,未出现问题。同样也是大量多线程,做的是与JAVA大致相同的工作

...全文
370 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
丁劲犇 2022-08-08
  • 打赏
  • 举报
回复
可以记录进入C和退出C的边界,对比时间开销. 类似这种操作。 https://blog.csdn.net/goldenhawking/article/details/90245867
丁劲犇 2022-07-30
  • 打赏
  • 举报
回复
C的dll是debug还是release,差别很大。debug比release差十几倍。 加载一次执行好多工作,还是频繁加载,差别很大。 调用一次送入一批数据,还是调用多次每次一个数据,差别很大。 C本身用了omp,结果设置OMP_NUM_THREADS不同,差别很大。
王桑的一天 2022-08-08
  • 举报
回复
@丁劲犇 release
王桑的一天 2022-08-08
  • 举报
回复
@丁劲犇 dll只加载一次呀,一直用就可以了。不会频繁加载呀
王桑的一天 2022-08-08
  • 举报
回复
@丁劲犇 线程少时,没有问题。多了有问题,这我就觉得是他程序问题了。但他说是虚拟机调dll引起的问题

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧