Java MAT空间与TaskManager空间
在网上搜索了一段时间后,我决定请你帮我解决这个问题 我的程序应该分析日志文件,它们非常大。它们的容量约为100mb到2gb。我想使用像FileChannel这样的NIO类来读取文件 我不想将文件保存在内存中,但我想立即处理这些行。代码是有效的 现在我的问题是:我分析了EclipseMat插件的内存使用情况,它说大约保存了18mb的数据(这很合适)。但是Windows中的TaskManager表示JVM使用了大约180mb的内存 你能告诉我这是为什么吗 我不想用FileChannel保存读取的数据,我只想处理它。后来我关闭了频道-我以为所有的数据都会被删除Java MAT空间与TaskManager空间,java,heap,mat,Java,Heap,Mat,在网上搜索了一段时间后,我决定请你帮我解决这个问题 我的程序应该分析日志文件,它们非常大。它们的容量约为100mb到2gb。我想使用像FileChannel这样的NIO类来读取文件 我不想将文件保存在内存中,但我想立即处理这些行。代码是有效的 现在我的问题是:我分析了EclipseMat插件的内存使用情况,它说大约保存了18mb的数据(这很合适)。但是Windows中的TaskManager表示JVM使用了大约180mb的内存 你能告诉我这是为什么吗 我不想用FileChannel保存读取的数据
我希望你们能帮助我区分MAT中显示的已用空间和TaskManager中显示的已用空间。MAT将只显示程序主动引用的对象。JVM使用的内存比这多:
- 它自己的代码
- 非对象数据(类、编译字节码e.t.c.)
- 当前未使用但已分配的堆空间
具有高对象分配/取消分配速率的应用程序将更糟糕-我有一个使用1.8GB内存的应用程序,而实际需要的内存不到100MB。不过,将最大堆大小减少到120 MB会将执行时间增加几乎整整一个数量级。感谢您的快速回答。因此,TaskManager中使用了多少空间并不重要(以防我有足够的内存)?如果程序即将耗尽内存,JVM将运行垃圾收集器?好的,谢谢。我尝试使用-Xmx50m参数启动应用程序,TaskMgr中的空间减少了。这回答了我的问题!