todo: heap size opt