为何收集堆跟踪数据?
收集堆跟踪数据可以帮助识别程序中的内存泄漏,或查找动态内存不足的地方。
收集器如何收集堆跟踪数据?
收集器将包装器函数插入 C 标准库内存分配函数 malloc、realloc 和 memalign 及内存释放函数 free 中。Fortran 子例程 allocate 和 deallocate 调用 C 标准库函数,因此这些子例程也被间接跟踪。
在性能分析器中可以看到哪些堆跟踪度量?
堆跟踪数据将被转换为以下度量:
度量 | 定义 |
---|---|
分配 | 对内存分配函数的调用数目。 |
分配的字节 | 在对内存分配函数的每一调用中分配的字节数总和。 |
泄漏 | 对内存分配函数(不具有相应的对 free 的调用)的调用数。 |
泄漏的字节 | 已分配但未释放的字节数。 |
堆跟踪数据收集的限制是什么?
除非已经预装入收集器库 libcollector.so,否则不能在已经运行的程序中收集堆跟踪数据。有关详细信息,参见在正运行的进程上收集性能数据。
JavaTM 内存分配和重新分配将无法跟踪。
有关详细信息,参见《程序性能分析工具》手册。
另请参见 | |
---|---|
收集性能数据 |