由于市场上还存在着大量的32位机型,因此我们也经常会遇到因为虚拟内存空间不足而导致的程序崩溃问题,所以这一节开始主要介绍虚拟内存的优化。针对这一方向的优化,最常用的方案是释放虚拟内存空间中不使用的内存,以此来增加虚拟内存的大小。
既然需要释放虚拟内存空间中用不上的内存,那么我们就不可避免地要分析maps文件并从中找到可以释放的内存。通过查看maps文件,如图2-34所示,能发现每个线程栈(anno:stack_and_tls)所占用的虚拟内存大小都为2MB左右。对于一个稍大的应用程序来说,在运行过程中使用数百个线程也是很正常的事情,而这些线程总共消耗的虚拟内存会达到上百MB,因此对线程栈的大小进行优化,也是有效的虚拟内存优化方案之一。
图2-34 maps文件数据