前言:
以前一直在华为上班,说实话,估计没有哪个华为人有闲心写Blog,Blog更多属于IT工程师的专利。这两年从华为出来后,开始写blog。但从前面的blog的查看次数来看,目前大家最主要关心的还是Android方面的技术。没办法,估计现在人才缺口最大的属于移动互联网Android方面的了。
但技术都是逐步发展出来的,android不可能是孙悟空,凭空从石头里面蹦出来。如果分解Android,实际上上关键技术除开架构外,基础技术都是很老旧的。比如APP工程师开发语言是Java,系统开发工程师是Java和C/C++,操作系统是Linux, 虚拟机还是没有逃脱常用虚拟机的范畴。当然基于上述技术,还是有优化和创新。但如果对这些基础技术掌握的话,要增量学习这些新东西是很容易的。
后续会花点时间深入学习虚拟机的技术。虚拟机技术最核心的就是GC,垃圾回收或者说自动内存管理。掌握了GC,其实其他的,应该也不会很难吧。
正文:
首先推荐大家一定要看看《The Garbage Collection Handbook》这本书,通过该书,我才对以前学习的GC相关的理论有了完整的脉络:
1. GC技术发展有40多年的历史,但核心技术包括:
1) 垃圾对象的查找或者非垃圾对象的定位。即Mark过程
2)清扫垃圾过程。即Sweep。
围绕上述过程,目前核心的技术包括:Mark-Sweep, Coping collection, Mark Compact, Ref Counting.
Mark Sweep解决了垃圾的定位问题,Coping Collection解决了回收的内存优化问题,防止碎片。Mark Compact也是一种压缩方法。Ref conting属于一种Mark方法。
总的来说,GC的问题域包括:
1. 如何有利于更好地后续内存分配
2.如何快速查找到垃圾或者非垃圾
3.如何使回收后的内存方便后续的继续分配。
解决上述问题优劣的标准包括:
1. 内存分配速度更快,比如Cache命中率影响度最低
2. Pause时间更短
以前,我总觉得垃圾回收的目的在于垃圾回收,现在明白,实际上GC的核心在于自动化的内存管理。GC只属于自动内存管理的一部分。而程序员,应该理解系统
提供的内存管理能力和特点,主动适应编程,才能更好地发挥性能。就好比买小车,小轿车和越野车的加速特点不一样,强行猛踩油门,预期结果可能并不能满足。
只有更好地顺应,方能更好地利用。