Overhead has very little impact on performance, do not optimize pre-emptively.
Why: running optimize causes MySQL to completely rebuild the table. it does this by marking the old table as "no longer used", and copying all data to the new table.
During this procedure you effectively have no working table.
If that operation is interrupted in any way other than what MySQL expects, you loose both copies of the table. What kind of interruptions can you get? Well running out of diskspace is a very popular one.
MySQL doesn't (or didn't, I haven't tried this for a while) check for the required amount of diskspace.
So if you want to get more diskspace by running OPTIMIZE, make sure you have enough space to rebuild the table (which you probably don't, otherwise you wouldn't want to clear diskspace
)