首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MAT空间与TaskManager空间

MAT空间与TaskManager空间
EN

Stack Overflow用户
提问于 2013-02-20 17:03:08
回答 1查看 43关注 0票数 0

在网上搜索了一段时间后,我决定向你寻求帮助来解决我的问题。

我的程序应该分析日志文件,它真的很大。它们大约是100mb到2 2gb。我想使用像FileChannel这样的NIO类来读取文件。

我不想将文件保存在内存中,但我想立即处理这些行。代码起作用了。

现在我的问题是:我用Eclipse MAT插件分析了内存使用情况,结果显示节省了大约18mb的数据(这是合适的)。但Windows中的TaskManager表示,JVM使用了大约180mb。

你能告诉我为什么会这样吗?

我不想用FileChannel保存读取的数据,我只想处理它。之后我会关闭频道--我以为所有的数据都会被删除?

我希望你们能帮助我区分已用空间显示在MAT和已用空间显示在TaskManager之间的区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 17:09:47

MAT将只显示程序主动引用的对象。JVM使用的内存比这多:

类自己的code

  • Non-object数据(类,已编译的字节码e.t.c.)当前未使用但已分配的堆空间。

最后一个案例可能是最大的案例。根据计算机上有多少物理内存,JVM将被set a default maximum size for its heap。为了提高性能,它将以最少的垃圾收集活动来使用高达该数量的内存。这意味着不再被引用的对象将保留在内存中,而不是立即被垃圾回收,从而增加了使用的内存总量。

因此,JVM通常不会释放它作为堆的一部分分配给系统的任何内存。这将在操作系统监控实用程序中显示为过多的已用内存。

具有高对象分配/释放比率的应用程序将会更糟--我有一个应用程序,它使用1.8 be的内存,而实际需要的内存少于100MB。但是,将最大堆大小减少到120MB,会将执行时间增加几乎一个数量级。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14975860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档