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。
如果这一切都是真的,那么如果它们不消耗系统中的所有内存,那么我们应该如何能够准确地检测应用程序中的内存泄漏?
答案 0 :(得分:0)
检查“共享”列是否包含较大的值?如果是这样,你的RES内存可能是由于memory-mapped files。这是一种有效访问大型数据集的机制,它可能由某些库在内部使用。