NAND flash memory becomes one of the most popular storage devices in embedded system and mobile computers. Efficient flash file system designs are important for system designers and users. In this paper, we study the design issues and performance of flash-specific file systems and define four performance metrics to evaluate flash file systems. Then, detailed comparisons of three mainstream flash file systems are conducted, including JFFS2, YAFFS2 and UBIFS. Taking techniques used in the three file systems and evaluation results into account, flash file system design space is discussed. This paper can provide users a comprehensive understanding of NAND flash file system design, present guidelines for measurement of flash file systems and help users determine which file system best meets their need.