fix: GC marking, and support keep-alive