modify CircularBuffer, add Singleton