Merge branch 'practice'
update
Merge branch 'master' into practice
add doGC, doRecursion
do singleton