理解* nix中的RES内存并debugging内存泄漏

RE: Java中可能的本机内存释放错误

我注意到, RES内存可能比你的应用程序实际分配的内存显示更多的内存。 在上面的例子中,有很多的alloc / dealloc命令,但RES内存卡在一个很高的数字。 我知道这不是JIT或其他内存过程的结果,因为通常情况下,您可以通过alloc和dealloc 500M来观察RES状态。

 jon@ubuntu-dev:~$ top -d 1 -p 31067 | grep java 31067 jon 20 0 6847648 27988 15420 S 0.0 0.2 0:00.09 java 31067 jon 20 0 7769264 743952 15548 S 315.5 4.6 0:03.25 java 31067 jon 20 0 7900336 847868 15548 S 380.1 5.3 0:07.06 java 31067 jon 20 0 7834800 810324 15548 S 379.1 5.0 0:10.86 java 31067 jon 20 0 7703728 700028 15548 S 379.2 4.3 0:14.66 java 31067 jon 20 0 7900336 894940 15548 S 379.2 5.5 0:18.46 java 31067 jon 20 0 7703728 674400 15548 S 277.5 4.2 0:21.24 java 31067 jon 20 0 7376048 430868 15548 S 59.9 2.7 0:21.84 java 31067 jon 20 0 7376048 430868 15548 S 0.0 2.7 0:21.84 java 31067 jon 20 0 7376048 430868 15548 S 1.0 2.7 0:21.85 java 31067 jon 20 0 7376048 430868 15548 S 0.0 2.7 0:21.85 java 31067 jon 20 0 7376048 430868 15548 S 1.0 2.7 0:21.86 java 

这里的应用程序不占据那么多的内存。 Java说承诺的大小是35MB,本地内存大小为0。

如果这一切都是真的,那么我们应该如何在我们的应用程序中准确地检测到内存泄漏,如果它们没有消耗系统中的所有内存呢?

检查“共享”列是否包含大的值? 如果是这样,你的RES内存可能是由于内存映射文件 。 这是一种高效访问大型数据集的机制,可以由某个库在内部使用。