了解* nix中的RES内存并调试内存泄漏

时间:2015-02-15 15:10:16

标签: java linux memory

RE:Possible native memory release error in Java

我注意到RES内存可能显示的内存比应用程序实际分配的内存多得多。在上面的示例中,有许多alloc / dealloc命令,但RES内存卡在一个很高的数字。我知道这不是JIT或其他内存进程的结果,因为通常情况下你可以分配和释放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。

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

1 个答案:

答案 0 :(得分:0)

检查“共享”列是否包含较大的值?如果是这样,你的RES内存可能是由于memory-mapped files。这是一种有效访问大型数据集的机制,它可能由某些库在内部使用。