针对“增加内存大小”这个优化方法论,读者可能会有疑问:内存大小是设备决定的,要怎样增加内存大小呢?通过前面的基础知识我们可以知道,虽然物理内存以及系统为进程创建的虚拟内存的大小都是固定的,但是还有很多其他的内存空间是通过虚拟机或者系统库来创建的,比如默认为512MB的Java堆空间是虚拟机来创建和管理的,默认为1024 KB的线程栈空间是libc系统库来创建的,所以我们可以通过Native Hook技术来改变系统库或者虚拟机的逻辑,从而实现“改变这些空间大小,增加内存空间”的优化方案。
但是通过Native Hook改变系统库的逻辑,从而增加内存大小并不是很常规的优化方案,因为想要落地这个优化方案,我们不仅需要熟悉底层的逻辑和源码,还要熟悉Native Hook技术。比较经典的案例如字节跳动的mSponse内存优化方案,便是通过Native Hook技术将LargeObjectSpace从原有的空间中分离出来,并为其分配了512MB的独立空间。
除了扩大可用的内存空间,我们还可以通过减少内存空间中被系统所占用却并不会使用的空间,来间接提升可用的内存大小,这一方法在虚拟内存的优化中经常会用到,后文会通过实战案例来进一步讲解。