When using (oracle) jdbc addbatch for an insert statement having a blob, when should we free the blob - after the addBatch or after the executeBatch?
You should free them only after execution. The JDBC 4.3 specification (section 14.1.4) says:
The sets of parameter values together with their associated parameterized update commands can then be sent to the underlying data source engine for execution as a single unit.
In other words, the blob will be used on execution of the batch, freeing it earlier would mean it is no longer available to be used at time of execution.