Oracle® Solaris Studio 12.4:性能分析器

退出打印视图

更新时间: 2015 年 1 月
 
 

堆跟踪(内存分配)数据

对未正确管理的内存分配和取消分配函数进行调用可能会造成数据的使用效率降低,从而导致应用程序的性能降低。在堆跟踪中,收集器通过插入 C 标准库内存分配函数 mallocreallocvallocmemalign 以及取消分配函数 free 跟踪内存分配和取消分配请求。对 mmap 的调用被视为内存分配,它允许记录 Java 内存分配的堆跟踪事件。Fortran 函数 allocatedeallocate 调用 C 标准库函数,因此会间接跟踪这些例程。

不支持对 Java 程序的堆分析。

堆跟踪数据会被转换为以下度量。

表 2-3  内存分配(堆跟踪)度量
度量
定义
Allocations(分配)
对内存分配函数的调用数
Bytes allocated(分配的字节数)
每次调用内存分配函数时分配的字节总数
Leaks(泄漏)
调用内存分配函数(未对取消分配函数进行相应的调用)的数量
Bytes leaked(泄漏的字节数)
已分配但未取消分配的字节数

收集堆跟踪数据有助于识别程序中的内存泄漏,或定位内存分配效率不高的位置。

查看应用了过滤器的 "Leaks"(泄漏)视图时,显示的泄漏是在过滤标准下完成的内存分配,这些分配在任何时候都不会取消。泄漏不限于在过滤标准下未取消分配的分配。

有时(如在 dbx 调式工具中),内存泄漏定义为动态分配的内存块,在程序的数据空间中没有任何指向它的指针。此处所使用的泄漏定义包括这种替换的定义,但也包括存在指针的内存。