对未正确管理的内存分配和取消分配函数进行调用可能会造成数据的使用效率降低,从而导致应用程序的性能降低。在堆跟踪中,收集器通过插入 C 标准库内存分配函数 malloc、realloc、valloc 和 memalign 以及取消分配函数 free 跟踪内存分配和取消分配请求。对 mmap 的调用被视为内存分配,它允许记录 Java 内存分配的堆跟踪事件。Fortran 函数 allocate 和 deallocate 调用 C 标准库函数,因此会间接跟踪这些例程。
不支持对 Java 程序的堆分析。
|
收集堆跟踪数据有助于识别程序中的内存泄漏,或定位内存分配效率不高的位置。
查看应用了过滤器的 "Leaks"(泄漏)视图时,显示的泄漏是在过滤标准下完成的内存分配,这些分配在任何时候都不会取消。泄漏不限于在过滤标准下未取消分配的分配。
有时(如在 dbx 调式工具中),内存泄漏定义为动态分配的内存块,在程序的数据空间中没有任何指向它的指针。此处所使用的泄漏定义包括这种替换的定义,但也包括存在指针的内存。