加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么本机库在使用java时使用的内存比在Linux下使用C-Programm

发布时间:2020-12-15 00:34:19 所属栏目:Java 来源:网络整理
导读:我用C编写了一个库,它消耗了大量内存(数百万个小块).我写了一个使用这个库的程序.我写了一个使用相同库的 java程序. Java程序是库周围非常薄的层.基本上只有一个被调用的本机方法,所有的工作和几个小时后返回.使用java调用接口,Java和本机库之间没有进一步的
我用C编写了一个库,它消耗了大量内存(数百万个小块).我写了一个使用这个库的程序.我写了一个使用相同库的 java程序. Java程序是库周围非常薄的层.基本上只有一个被调用的本机方法,所有的工作和几个小时后返回.使用java调用接口,Java和本机库之间没有进一步的通信.也没有Java对象消耗了大量的内存.

所以c程序和Java程序非常相似.整个计算/内存分配发生在本机库中.仍然.执行时,c程序消耗3GB内存.但Java程序消耗4.3GB! (顶部报告的VIRT金额)

我检查了Java进程的内存映射(使用pmap).图书馆只使用40MB.因此,Java加载的其他库不是原因.

有没有人对这种行为有解释?

编辑:感谢您的答案到目前为止.为了使它更清晰一点:java代码除了调用本机库之外什么都不做! java堆是标准大小(可能是60MB)并且未使用(除了包含main方法的一个类和调用本机库的另一个类).

本机库方法是一个长期运行的方法,并且可以执行大量的malloc和frees.碎片化也是我自己想到的一种解释.但由于没有Java代码处于活动状态,因此Java程序和c程序的碎片行为应该相同.由于它不同,我还假设在c程序或Java程序中运行时使用的malloc实现是不同的.

解决方法

猜测:在JVM中运行时,您可能正在使用非默认的malloc实现,这种实现可以调整JVM的特定需求,并且比普通libc实现中的通用malloc产生更多的开销.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读