在小米note5上的测试,频繁malloc和free
1080p
malloc: 33us
free: 22us
memset: 538us
GetByteArrayRegion: 1456us,从Java拷贝内存到C++
GetByteArrayElements: 10us,获得java内存对应的的C++地址
ReleaseByteArrayElements: 29us,和GetByteArrayElements要成对出现,释放使用的java内存。
640x480
malloc: 9us
free: 11us
memset: 84us
GetByteArrayRegion: 262us,从Java拷贝内存到C++
GetByteArrayElements: 7us,获得java内存对应的的C++地址
ReleaseByteArrayElements: 25us,和GetByteArrayElements要成对出现,释放使用的java内存。
分析
我们可以看到拷贝非常耗时,对性能影响比较大,所以内存能不拷贝就不拷贝
其次是memset,memset要远远多余malloc和free;一般情况下memset没有实际用处,所以能不能调用就不调用吧。
malloc和free的耗时并不高,但是随着调用的次数越多,理论上,产生的内存分片越多,malloc和free的耗时也越多。
free的耗时一般比malloc要多,因为free除了将内存还给系统外,可能还要将相邻的空闲内存合并,所以耗时多一些。
反而相对而言,malloc的耗时最少。
网友评论