昨天完成了编码工作,最后调试没有完,今天过去仔细调试了一下,然后并入客户端看看效果。
出乎我意料之外的是,优化的效果比我预测的要好得多。原先我估算过,每个VM指令大概占10个字节左右,其中4个字节指令,4个字节的runtime。每行符号信息是8个字节,因为平均5个指令一行,所以算下来每个指令用不到2个自己的符号信息。(除了指令,runtime和符号信息可以在发布时去除)
而整个系统启动以后大约是900K条指令,这样指令占用的内存应不到11M。然而我修改了复用方式以后,指令数下降到不到300K以内。按照道理应该是节约600Kx10=6M的内存,但是节约的内存居然是12M,而实际上节省的内存则多达20M。
我想了一下,应该是函数头的开销不可小觑。函数头、局部变量、参数等平均算下来可能消耗多达近300个字节。继承不再复制代码以后,函数的数量锐减了20多K,这部分内存则总计6M。
除此之外,因为函数头有很多小内存片(我已经看这个不顺眼很久了,但是一直没有把它作为重点对象照顾),导致占用了很多额外的内存。削减了函数数量以后也让这部分的空间节省下来了,将近8M。
如此说来,剩下的8K左右的函数,占用的内存额外开销应该也有近3M,如果改善这部分数据使用内存的方式,至少应该可以节约一大半,也就是2M左右。目前看来仍然有进一步压缩的空间。
没有评论:
发表评论