Recently, NAND flash memory is being used as the swap space of virtual memory as well as the file storage of embedded systems. Since temporal locality is dominant in page references of virtual memory, LRU and its approximated algorithms are widely used. However, we show that this is not true for write references. We analyze the characteristics of virtual memory read and write references separately, and find that the temporal locality of write references is weak and irregular. Based on this observation, we present a new page replacement algorithm that uses different strategies for read and write operations in predicting the re-reference likelihood of pages. For read operations, temporal locality alone is used, but for write operations, write frequency as well as temporal locality is used. The algorithm partitions the memory space into a read area and a write area to keep track of their reference patterns precisely, and then adjusts their sizes dynamically based on their reference patterns and I/O costs. Though the algorithm has no external parameter to tune, it performs better than CLOCK, CAR, and CFLRU by 20-66%. It also supports optimized implementations for virtual memory systems.