It will. For several times, and then “cool off” for ten minutes and try again. From the docs:
Heroku’s dyno restart policy is to try to restart crashed dynos by spawning new dynos once every ten minutes. This means that if you push bad code that prevents your app from booting, your app dynos will be started once, then restarted, then get a cool-off of ten minutes. In the normal case of a long-running web or worker process getting an occasional crash, the dyno will be restarted instantly without any intervention on your part. If your dyno crashes twice in a row, it will stay down for ten minutes before the system retries.
The docs: https://devcenter.heroku.com/articles/dynos#automatic-dyno-restarts
EDIT Regarding free dynos: the restart behavior is the same. However, there is something called “Dyno Idling” which happens only in free dynos. Basically it means that if your dyno does not receive any request for 1 hour it will “go to sleep”, and the next request will “wake it up”, which will cause that next request to be slightly delayed. This happens only when you have 1 free web dyno for your app.
To circumvent that, either have 2 dynos (and then none of them will idle, but you will be paying for one), or have “something” poll your web dyno every (say) 30 minutes. Like pingdom, say.
The docs: https://devcenter.heroku.com/articles/dynos#automatic-dyno-restarts